IronRuby를 사용하고 있고 C# 메서드가있는 블록을 사용하는 방법을 알아 내려고합니다.C# 메서드로 IronRuby 블록을 사용하는 방법
이def BlockTest()
result = yield("hello")
puts result
end
BlockTest { |x| x + " world" }
C# 및 아이언 루비와 같은 일을하는 나의 시도는 다음과 같습니다 :
이
내가 모방을 시도하고있어 기본적인 루비 코드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)
.
string scriptText = "csharp.BlockTest lambda { |arg| arg + 'world'}\n";
그러나 나는 내 원래 루비 예의 등가의 있도록 원래 아이언 루비 스크립트로 작업하는 방법을 어떻게해야합니까?
string scriptText = "csharp.BlockTest { |arg| arg + 'world'}\n";
람다 접근법을 사용하는 것과 같은 방법입니다. Ruby가 명시 적으로 람다 또는 Proc 객체를 만들 필요없이 동일한 직관적 인 방법으로 블록을 사용하는 방법을 찾으려고했습니다. – sipwiz