在任何.NET语言中寻找eval函数

时间:2011-02-16 10:59:23

标签: .net clr eval

任何.NET / CLR语言是否支持eval函数,还允许调用标准.NET代码(例如调用C#代码)?我知道F#和C#都不支持eval。还有其他选择吗?

我理想地寻找与.NET 3.5兼容的解决方案(所以我认为这排除了Clojure-CLR),但我对任何/所有选项感兴趣。

4 个答案:

答案 0 :(得分:3)

答案 1 :(得分:1)

不确定这是否有帮助,但正如您所说,您正在寻找任何解决方案。 那么IronRuby呢?

public static class RubyEngineCreator
{
    private static ScriptEngine ironRubyEngine = null;
    private static ScriptEngine CreateEngine()
    {
        if (ironRubyEngine == null)
            ironRubyEngine = Ruby.CreateEngine();

        return ironRubyEngine;
    }

    public static dynamic GetRubyObject(string script)
    {
        return CreateEngine().CreateScriptSourceFromString(script).Execute();
    }
}

[TestClass]
public class UnitTest
{
    private T Eval<T>(string s)
    {
        return (T)RubyEngineCreator.GetRubyObject(s);
    }

    [TestMethod]
    public void Should_Return4_4()
    {
        var result = Eval<int>("2 + 2");
        Assert.AreEqual(4, result);
    }
}

取自http://viniciusquaiato.com/blog/eval-em-c-com-ironruby/(pt-BR)

的例子

答案 2 :(得分:1)

JScript.NET具有eval功能,请参阅this answer

答案 3 :(得分:0)

我最终的解决方案是采用IronPython。 JScript.NET在技术上确实有效,但使用Visual Studio 2008并且JScript.NET似乎被Microsoft弃用了。另一方面,IronPython有一个相当活跃的社区。