2010-11-15 19 views
5

yield çalışacak şekilde bir temsilci olarak C# 'dan bir IronRuby yöntemi çağırmak mümkün mü?Bir temsilci ile C# dan IronRuby çağrısı

Aşağıdakiler bana yanlış argüman sayısı veriyor (0 için 0) istisnası.

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

cevap

1

Bu mümkün değil IronRuby çekirdeği listesinde IronRuby core team üye Tomáš Matoušek bir cevap var. Oysa. IronRuby'den C# delegelerinin nasıl çağırılacağını göstermek için

1

Eminim Ruby'nin bloğu bir C# delege değildir.
Delegeyi Ruby'ye iletirseniz, bunu temsilci'nin Invoke yöntemiyle çağırmalısınız.

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

biz yakut bloğuna C# temsilci dönüştürmek Can ... Bilmiyorum:
İşte örnek kod verilmiştir.

+0

+1. IronRuby'den "verim" C# kodu için bir yol varsa hala merak ediyorum. –