2013-02-08 40 views
0

如何在IronRuby下的ScriptScope上設置委託? 我試過上面的代碼,但在調用函數時出現了一個ArgumentException。如何在ScriptScope上設置功能

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

import "Data" 

另外,我怎樣才能使用上面的代碼發送塊作爲回調到C#代碼?

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

回答

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