我可以在Ruby中动态调用数学运算符吗?

ruby中有这样的东西吗?

send(+, 1, 2) 

我想让这段代码看起来不那么多余

 if op == "+" return arg1 + arg2 elsif op == "-" return arg1 - arg2 elsif op == "*" return arg1 * arg2 elsif op == "/" return arg1 / arg2 

是的,只需使用send (或者更好的是public_send ),如下所示:

 arg1.public_send(op, arg2) 

这是有效的,因为Ruby中的大多数运算符(包括+-*/ 等 )只是调用方法。 所以1 + 21.+(2)

如果是用户输入,您可能还希望将op列入白名单,例如%w[+ - * /].include?(op) ,否则用户将能够调用任意方法(这是一个潜在的安全漏洞)。

作为另一种选择,如果你的运算符和操作数恰好是字符串格式,比如来自gets方法,你也可以使用eval

例如:

a = '1'; b = '2'; o = '+'

eval a+o+b

eval '1+2'

返回3