Frage

Ist es möglich, eine IronRuby Methode von C # mit einem Delegierten als Parameter so zu nennen, dass yield funktionieren würde?

Im Folgenden gibt mir eine falsche Anzahl von Argumenten (1 0) Ausnahme.

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);
War es hilfreich?

Lösung 2

Got eine Antwort von IronRuby Kernteam Mitglied Tomáš Matoušek auf der Liste IronRuby-Kern, dass es nicht möglich ist. Noch nicht.

Andere Tipps

Ich bin sicher, dass Rubys Block kein c # Delegaten ist.
Wenn Sie Delegat Ruby passieren sollten Sie es über Stellvertretung Invoke-Methode aufrufen.
Hier ist ein Beispielcode:

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

Können wir c # Delegaten in rubin Block umwandeln ... Ich weiß es nicht.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top