Forum: IronRuby An Issue with CLR Delegates

Announcement (2017-05-07): is now read-only since I unfortunately do not have the time to support and maintain the forum any more. Please see and for other Rails- und Ruby-related community platforms.
Shay F. (Guest)
on 2009-06-09 16:34

Today I'm playing with CLR delegates :)

I've run into a strange behavior.

Take a look at the next C# block:
public class Printer
  public delegate void PrintValue(string value);

Assuming the above is the content of assembly.dll, take a look at the
next IR console output:

>>> require "assembly.dll"
=> true
>>> p = { |x| puts x }
=> Printer+PrintValue
>>> p("dsfs")
=> nil
>>> d = { |x| puts x }
=> Printer+PrintValue
>>> d("dsfd")
:0: undefined method `d' for main:Object (NoMethodError)

Why does p work and d doesn't?

BTW, I see that delegates are converted to something called LightLambda.
What is that?

Many thanks!
Follow me:
Jim D. (Guest)
on 2009-06-09 21:32
(Received via mailing list)
Looks like some odd caching or invalidation. Please file a bug on


...there is no try
Tomas M. (Guest)
on 2009-06-09 22:58
(Received via mailing list)
This is actually correct behavior.

p("dsfs") calls Kernel#p with parameter "dsfs"
d("dsfs") attempts to call method "d", which doesn't exist.

You need to do p.invoke("dsfs") and d.invoke("dsfs") to invoke the

Shay F. (Guest)
on 2009-06-10 00:07

Brilliant discovery Tomas!

Follow me:
Tomas M. (Guest)
on 2009-06-10 00:26
(Received via mailing list)
Well, it doesn't take much to see these things right away. Just to
implement a Ruby VM :)

This topic is locked and can not be replied to.