Vinicius Quaiato

{tecnologia, conceitos, negócios, idéias, práticas, .NET, ruby, osx, ios e algo mais}

Eval em C# com IronRuby


Fala 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:

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:

[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);
    }
}
</int></string></int></t>

Não é a melhor biblioteca do mundo para Eval, mas quebra o galho :PAqui está o download da solution.

Abraços, Vinicius Quaiato.

Voltar

Fork me on GitHub