An Issue with CLR Delegates


#1

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


#2

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

JD

…there is no try


#3

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


#4

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

Tomas


#5

lol!

Brilliant discovery Tomas!

Thanks!

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