Desenvolvimento - C#
Eval em C# com IronRuby
Veja uma proposta do autor de uso de Eval em C# com IronRuby.
por Vinicius QuaiatoFala galera, estava conversando com o Bruno Kenj e ele estava com a necessidade realizar um Eval em C#.
Bom, nem preciso dizer que minha resposta foi “Use IronRuby”.
Bom, segue abaixo o código que criei:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | 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(); } } |
Simples não?!
Seguem alguns testes e um método Eval que criei pra facilitar:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 | [TestClass] public class UnitTest1 { private T Eval<T>(string s) { return (T)RubyEngineCreator.GetRubyObject(s); } [TestMethod] public void Deve_Retornar_Somar_2_com_2_Retornar_4() { var retorno = Eval<int>("2 + 2"); Assert.AreEqual(4, retorno); } [TestMethod] public void Deve_Retornar_ViniciusQuaiato() { var retorno = Eval<string>(""vinicius" + "quaiato""); Assert.AreEqual("viniciusquaiato", retorno); } [TestMethod] public void Deve_Dividir_9_por_3_Retornar_3() { var retorno = Eval<int>("9 / 3"); Assert.AreEqual(3,retorno); } } |
Não é a melhor biblioteca do mundo para Eval, mas quebra o galho.
Aqui está o download da solution.