J'utilise IronRuby et essayer de comprendre comment utiliser un bloc avec une méthode C#.Comment utiliser un bloc IronRuby avec une méthode C#
Voici le code de base Ruby je tente d'imiter:
def BlockTest()
result = yield("hello")
puts result
end
BlockTest { |x| x + " world" }
Ma tentative de faire la même chose avec C# et IronRuby est:
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);
Le BlockTestClass est:
public class BlockTestClass
{
public void BlockTest(Func<string, string> block)
{
Console.WriteLine(block("hello "));
}
}
Quand je lance le code C# Je reçois une exception:
nombre incorrect d'arguments (0 pour 1)
Si je change le script IronRuby à ce qui suit cela fonctionne.
string scriptText = "csharp.BlockTest lambda { |arg| arg + 'world'}\n";
Mais comment puis-je à travailler avec le script IronRuby d'origine pour que ce soit l'équivalent de mon original exemple Ruby?
string scriptText = "csharp.BlockTest { |arg| arg + 'world'}\n";
C'est la même chose que d'utiliser l'approche lambda. J'essayais de trouver un moyen d'utiliser un bloc de la même manière intuitive que Ruby sans avoir à créer explicitement un objet lambda ou Proc. – sipwiz