我想执行数学表达式,就像这个样本字符串一样。
var offsetRequired = (e.offsetX || e.pageX - $(e.target).offset().left);
A = "23>=34"
B = "77<90"
我希望像C = "33>77"
这样的函数返回true或false。
目前我正在使用此方法
if exec_string(A)
无法处理很多案件。有什么帮助吗?
答案 0 :(得分:5)
您可以使用eval
:
eval("23>=34")
#=> false
eval("23<=34")
#=> true
但请记住,eval
可能是邪恶的。特别是如果评估的字符串是由用户提供的。想象一下,如果用户输入删除文件的命令会发生什么......
答案 1 :(得分:1)
您可以使用Object#send
执行此操作
调用symbol标识的方法,并将指定的参数传递给它。
def self.calc(L, cmpr, R)
left = L.to_i
right = R.to_i
operator = cmpr.to_sym
left.send(operator, right)
end
例如,
irb(main):001:0> 5.send(:+, 7)
=> 12
irb(main):002:0> 3.send(:>=, 5)
=> false
irb(main):003:0> 5.send(:>=, 2)
=> true
irb(main):004:0> 12.send(:-, 3)
=> 9
答案 2 :(得分:0)
我将尝试将eval
与确保不存在字母的正则表达式结合使用(例如,/[\d\.\+\s]+/
,因为我唯一需要的操作是加法)。这样,仅使用数字和运算符,就无法实例化任何类或调用非数字方法。