在紅寶石中是否有這樣的東西?我可以在Ruby中動態調用數學運算符嗎?
send(+, 1, 2)
我想使這段代碼看起來不那麼多餘
if op == "+"
return arg1 + arg2
elsif op == "-"
return arg1 - arg2
elsif op == "*"
return arg1 * arg2
elsif op == "/"
return arg1/arg2
在紅寶石中是否有這樣的東西?我可以在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)
,否則用戶將能夠調用任意方法(這是一個潛在的安全漏洞)。
作爲另一種選擇,如果你的操作和操作數正好是字符串格式,從gets
法說,你也可以使用eval
:
例如:
a = '1'; b = '2'; o = '+'
eval a+o+b
變成
eval '1+2'
返回3
那是什麼'%w'符號?或者它比'[「+」,「 - 」,...]包含更清潔(op)' – MxyL
您需要轉義''''%w'才能工作。 – oldergod
'%w [a b c]'相當於'['a','b','c']' - 它只是字符串數組的簡寫形式(元素由空格分隔)。 –