Do any .NET/CLR languages support an eval
function and also allow calling into standard .NET code (e.g. calling into C# code)? I know that neither F# nor C# support eval
. Are there any other options?
I am ideally looking for a solution compatible with .NET 3.5 (so I think this rules out Clojure-CLR), but I'm interested in any/all options.
JScript.NET has an eval
function, see this answer
An Eval Function for C# using JScript.NET (JavaScript)
Not sure if this helps, but as you said you're looking for any solution.
What about 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);
}
}
Example taken from http://viniciusquaiato.com/blog/eval-em-c-com-ironruby/ (pt-BR)
My eventual solution was to adopt IronPython. JScript.NET technically does work, but it's clumbsy to use with Visual Studio 2008 and JScript.NET seems to be getting deprecated by Microsoft. IronPython on the other hand has a fairly active community.