如何在ScriptScope上设置功能

时间:2013-02-08 21:16:48

标签: c# .net clr ironruby

如何在IronRuby下的ScriptScope上设置委托? 我尝试了上面的代码但是在调用函数时遇到了ArgumentException。

scope.SetVariable("import", new Action<string>(DSLImport));

import "Data"

另外,如何使用上面的代码发送块作为C#代码的回调?

import "Data" do |f|
    f.foo = false
end

1 个答案:

答案 0 :(得分:0)

我发现了一种可能不是最好的方法,但却有效。 这是ScriptScope的扩展方法:

public static void SetMethod(this ScriptScope scope, string name, Delegate method)
{
    scope.SetVariable(name + "__delegate", method);
    scope.Engine.Execute("def " + name + "(*args, &block)\nargs.push block if block != nil\n" + name + "__delegate.invoke(*args)\nend", scope);
}