An Issue with CLR Delegates

Hi,

Today I’m playing with CLR delegates :slight_smile:

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 = Printer::PrintValue.new { |x| puts x }
=> Printer+PrintValue
p(“dsfs”)
“dsfs”
=> nil
d = Printer::PrintValue.new { |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!
Shay.

http://www.ironshay.com
Follow me: http://twitter.com/ironshay

Looks like some odd caching or invalidation. Please file a bug on
Codeplex.

JD

…there is no try

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
delegates.

Tomas

Well, it doesn’t take much to see these things right away. Just to
implement a Ruby VM :slight_smile:

Tomas

lol!

Brilliant discovery Tomas!

Thanks!

http://www.ironshay.com
Follow me: http://twitter.com/ironshay