Я использую IronRuby и пытаюсь понять, как использовать блок с методом C #.
Это основной код Ruby, который я пытаюсь эмулировать:
def BlockTest ()
result = yield("hello")
puts result
end
BlockTest { |x| x + " world" }
Моя попытка сделать то же самое с C # и IronRuby:
string scriptText = "csharp.BlockTest { |arg| arg + 'world'}\n";
ScriptEngine scriptEngine = Ruby.CreateEngine();
ScriptScope scriptScope = scriptEngine.CreateScope();
scriptScope.SetVariable("csharp", new BlockTestClass());
scriptEngine.Execute(scriptText, scriptScope);
BlockTestClass - это:
public class BlockTestClass
{
public void BlockTest(Func<string, string> block)
{
Console.WriteLine(block("hello "));
}
}
Когда я запускаю код C #, я получаю исключение:
неверное количество аргументов (0 для 1)
Если я изменю скрипт IronRuby на следующий, он будет работать.
string scriptText = "csharp.BlockTest lambda { |arg| arg + 'world'}\n";
Но как мне заставить его работать с оригинальным скриптом IronRuby, чтобы он соответствовал моему первоначальному примеру Ruby?
string scriptText = "csharp.BlockTest { |arg| arg + 'world'}\n";