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 中的大多数运算符(包括 +
、-
、*
、/
、and more)只需调用方法。所以 1 + 2
与 1.+(2)
相同。
如果是用户输入,您可能还想将 op
列入白名单,例如%w[+ - */].include?(op)
,否则用户将能够调用任意方法(这是一个潜在的安全漏洞)。
关于ruby - 我可以在 Ruby 中动态调用数学运算符吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13060239/