Ищете функцию eval на любом языке .NET - PullRequest
4 голосов
/ 16 февраля 2011

Поддерживают ли какие-либо языки .NET / CLR функцию eval, а также разрешают вызов в стандартный код .NET (например, вызов в код C #)?Я знаю, что ни F #, ни C # не поддерживают eval.Есть ли другие варианты?

В идеале я ищу решение, совместимое с .NET 3.5 (поэтому я считаю, что это исключает Clojure-CLR), но меня интересуют любые / все варианты.

Ответы [ 4 ]

3 голосов
/ 16 февраля 2011
1 голос
/ 16 февраля 2011

JScript.NET имеет функцию eval, см. этот ответ

1 голос
/ 16 февраля 2011

Не уверен, поможет ли это, но, как вы сказали, вы ищете какое-либо решение.А как насчет 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)

0 голосов
/ 17 февраля 2011

Мое окончательное решение было принять IronPython. Технически JScript.NET работает, но его неудобно использовать с Visual Studio 2008, и Microsoft кажется, что JScript.NET устарела. С другой стороны, у IronPython довольно активное сообщество.

...