Desenvolvimento - C#

Eval em C# com IronRuby

Veja uma proposta do autor de uso de Eval em C# com IronRuby.

por Vinicius Quaiato



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.

Vinicius Quaiato

Vinicius Quaiato - Atualmente trabalha com arquitetura e desenvolvimento de software na Envision Tecnologia.
twitter: @vquaiato
blog; http://viniciusquaiato.com