2010-11-15 83 views
5

是否可以使用C#調用IronRuby方法,並使用委託作爲參數,以使yield可以工作?從C#調用IronRuby與委託人

下面給我一個錯誤的參數個數(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); 

回答

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 = [email protected](); 
t.test(new Action<string>(Console.WriteLine)); 

我們能否轉換C#的​​委託到紅寶石塊......我不知道。

+0

+1顯示如何從IronRuby調用C#委託。仍然很好奇,如果有一種方法可以從IronRuby產生C#代碼。 – 2010-11-28 20:22:41