You need to specify the type of the delegate in order to implicitly convert a
Ruby lambda to it. System.Delegate is not specific enough. You need to use some
subclass of Delegate.
So you can e.g. change the type of the array:
load_assembly 'System.Core'
a = System::Array[System::Action.of(Object)].new(5)
a[0] = lambda { |x| puts x }
or use an explicit delegate construction like so:
load_assembly 'System.Core'
a = System::Array[System::Delegate].new(5)
a[0] = System::Action.of(Object).new { |x| puts x }
Tomas
From: [email protected]
[mailto:[email protected]] On Behalf Of Martin Smith
Sent: Monday, August 03, 2009 4:46 PM
To: [email protected]
Subject: Re: [Ironruby-core] Getting a delegate in IronRuby
Thanks Jim,
I'm more trying to understand the underlying type semantics with delegates.
How would I do something like this:
>>> a = System::Array[System::Delegate].new(5)
=> [nil, nil, nil, nil, nil]
>>> a[0] = lambda {|x| puts x }
mscorlib:0:in `InternalSetValue': Object cannot be stored in an array of this
type. (System::InvalidCastException)
from mscorlib:0:in `SetValue'
from mscorlib:0:in `System.Collections.IList.set_Item'
from :0:in `[]='
from :0
>>> l = lambda {|x| puts x }
=> #<Proc:0x0000084@(unknown):1>
>>> a[0] = &l
unknown: syntax error, unexpected AMPERSAND
(Microsoft::Scripting::SyntaxErrorException)
Thanks,
Martin
On Mon, Aug 3, 2009 at 12:22 PM, Jim Deville
<[email protected]<mailto:[email protected]>> wrote:
For and event, you can use a block:
l = lambda {|s,e| do.stuff.here }
foo.event_name.add &l
foo.event_name.remove &l
Thanks,
JD
...there is no try
http://blog.jredville.com
From:
[email protected]<mailto:[email protected]>
[mailto:[email protected]<mailto:[email protected]>]
On Behalf Of Martin Smith
Sent: Monday, August 03, 2009 11:47 AM
To: [email protected]<mailto:[email protected]>
Subject: [Ironruby-core] Getting a delegate in IronRuby
Hello,
I was wondering how I can get a delegate in IronRuby.
One thing I was thinking about doing was trying to attach an event handler with
an EventInfo and it requires a delegate. It has a method called
AddEventHandler(object, Delegate), and i wanted to attach an event handler.
But I can't find any way to get a delegate in ruby. How would you guys do it?
I know i can also use:
object.send(event_name) { |*e| ...... }
In that case how would i remove that event handler?
Thanks in advance,
Martin
_______________________________________________
Ironruby-core mailing list
[email protected]<mailto:[email protected]>
http://rubyforge.org/mailman/listinfo/ironruby-core
_______________________________________________
Ironruby-core mailing list
[email protected]
http://rubyforge.org/mailman/listinfo/ironruby-core