执行位于数组内的ruby语句

时间:2014-02-25 18:25:27

标签: ruby arrays permutation

我想知道是否可以在数组中保存一些ruby语句,如:

    a = 1
    b = 0
    statements = ['a += 1','b = a + 4']
    statements.each { |s| s.execute }

我想要这样做的原因是能够使用Array permutation来执行数组中语句子集的每个组合。

也许我对自己造成了困难,并且有一种更容易(也许更明显)的方式。

感谢任何帮助。

3 个答案:

答案 0 :(得分:6)

正如LoïcFaure-Lacroix建议的那样,最好使用lambdas:

a = 1
b = 0
statements = [ lambda{a += 1}, lambda{b = a + 4} ]
statements.each(&:call)

执行后,请离开a == 2b == 6

答案 1 :(得分:1)

您可以使用eval

a = 1
b = 0
statements = ['a += 1','b = a + 4']
statements.each { |s| eval s }

答案 2 :(得分:0)

如果这涉及用户输入,那么实现模板化公式解析器(如Dentaku)会更安全。

样品:

calculator = Dentaku::Calculator.new
calculator.store({a:1, b:0})

statements = ['a + 1','(a + b + 5)/2']
statements.map {|s| calculator.evaluate(statement)}

#=> [2,3]

主要区别在于它不直接操作局部变量。它支持基本的数学函数,您可以注册自定义函数。