私は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#コードを実行すると、次の例外が発生します。
引数の数が間違っています(1の場合は0)
IronRubyスクリプトを次のように変更すると、機能します。
string scriptText = "csharp.BlockTest lambda { |arg| arg + 'world'}\n";
しかし、元のRubyの例と同等になるように、元のIronRubyスクリプトで動作させるにはどうすればよいですか?
string scriptText = "csharp.BlockTest { |arg| arg + 'world'}\n";