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