Yup, simply use send
(or, better yet, public_send
) like so:
arg1.public_send(op, arg2)
This works because most operators in Ruby (including +
, -
, *
, /
, and more) simply call methods. So 1 + 2
is the same as 1.+(2)
.
You may also want to whitelist op
if it’s user input, e.g. %w[+ - * /].include?(op)
, as otherwise the user will be able to call arbitrary methods (which is a potential security vulnerability).
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…