我想知道是否可以在数组中保存一些ruby语句,如:
a = 1
b = 0
statements = ['a += 1','b = a + 4']
statements.each { |s| s.execute }
我想要这样做的原因是能够使用Array permutation来执行数组中语句子集的每个组合。
也许我对自己造成了困难,并且有一种更容易(也许更明显)的方式。
感谢任何帮助。
答案 0 :(得分:6)
正如LoïcFaure-Lacroix建议的那样,最好使用lambdas:
a = 1
b = 0
statements = [ lambda{a += 1}, lambda{b = a + 4} ]
statements.each(&:call)
执行后,请离开a == 2
和b == 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]
主要区别在于它不直接操作局部变量。它支持基本的数学函数,您可以注册自定义函数。