使用委托从C#调用IronRuby

时间:2010-11-15 23:43:08

标签: c# delegates ironruby yield

是否可以使用委托作为参数从C#调用IronRuby方法,以便yield可以工作?

以下为我提供了错误的参数数量(1为0)例外。

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);

2 个答案:

答案 0 :(得分:1)

我确定Ruby的块不是c#委托。
如果将委托传递给Ruby,则应通过委托的Invoke方法调用它 以下是示例代码:

var rt = Ruby.CreateRuntime();
var eng = rt.GetEngine("rb");
eng.Execute(@"
            class Blocktest
              def test(block)
                block.Invoke('HELLO From IronRuby')
              end
            end
            ");
dynamic ruby = eng.Runtime.Globals;
dynamic t = ruby.Blocktest.@new();
t.test(new Action<string>(Console.WriteLine));

我们可以将c#delegate转换为ruby块吗...我不知道。

答案 1 :(得分:1)

在IronRuby核心列表上得到IronRuby core team成员Tomáš Matoušek的答案,这是不可能的。爱好。