Вызов IronRuby из C # с делегатом - PullRequest
5 голосов
/ 16 ноября 2010

Можно ли вызвать метод IronRuby из C # с делегатом в качестве параметра таким образом, что yield будет работать?

Следующее дает мне неправильное количество аргументов (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);

Ответы [ 2 ]

1 голос
/ 30 ноября 2010

Получил ответ от Основной команды IronRuby Участник Томаш Матушек в списке основных IronRuby, что это невозможно. Тем не менее.

1 голос
/ 28 ноября 2010

Я уверен, что блок Руби не является делегатом 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 = ruby.Blocktest.@new();
t.test(new Action<string>(Console.WriteLine));

Можем ли мы преобразовать делегат c # в блок ruby ​​... Я не знаю.

...