我正在使用 IronRuby 并试图想出一个无缝将块传递给 C# 的方法。这个问题是如何在 C# 中使用 IronRuby 块的后续问题,这表明块不能在 IronRuby 和 C# 之间传递。
我接下来的问题是,是否有一种方法可以使用 Ruby 包装器方法将块变成 lambda 或 Proc 对象并将其传递给 C# 来实现相同的目标?
下面是一些符合我想要做的代码。该代码不起作用,但希望意图足够清晰。
string scriptText =
@"def BlockTest
result = csharp.BlockTest somehow-pass-the-block ("hello")
puts result
end
BlockTest { |arg| arg + 'world'}";
Console.WriteLine("Compiling IronRuby script.");
ScriptEngine scriptEngine = Ruby.CreateEngine();
ScriptScope scriptScope = scriptEngine.CreateScope();
scriptScope.SetVariable("csharp", new BlockTestClass());
scriptEngine.Execute(scriptText, scriptScope);
C# BlockTest 类是:
public class BlockTestClass
{
public void BlockTest(Func<string, string> block)
{
Console.WriteLine(block("hello "));
}
}