Is it possible to call an IronRuby method from C# with a delegate as parameter in such a way that yield
would work?
The following gives me a wrong number of arguments (1 for 0) exception.
Action<string> action = Console.WriteLine;
var runtime = Ruby.CreateRuntime();
var engine = runtime.GetEngine("rb");
engine.Execute(@"
class YieldTest
def test
yield 'From IronRuby'
end
end
");
object test = engine.Runtime.Globals.GetVariable("YieldTest");
dynamic t = engine.Operations.CreateInstance(test);
t.test(action);
Got an answer by IronRuby core team member Tomáš Matoušek on the IronRuby-core list that it's not possible. Yet.
I'm sure Ruby's block is not a c# delegate.
If you pass delegate to Ruby you should invoke it via delegate's Invoke method.
Here is sample code:
Can we convert c# delegate into ruby block... I don't know.