{tecnologia, conceitos, negócios, idéias, práticas, .NET, ruby, osx, ios e algo mais}
17/07/2010
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.