我想在ruby中做这样的事情:
x = 0
y = 1
z = "!="
if x #{z} y
puts "True"
end
#True
#=> nil
x = 1
if x #{z} y
puts "True"
end
#True
#=> nil
使用运算符作为变量不会计算表达式。任何方式都可以做到这一点。
答案 0 :(得分:7)
试试这个
x = 0
y = 1
z = "!="
x.public_send(z, y)
=> true
这里的诀窍是知道3 >= 5
是3.>=(5)
答案 1 :(得分:4)
重申上述答案,我建议使用send
。
但是, 可以用原始样式编写代码 - 您只需要eval
(即执行)它:
x = 0
y = 1
z = "!="
if eval("x #{z} y")
puts "True"
end
一般来说,强烈建议不要使用eval
。它可能导致重大的安全问题(例如,如果您正在评估任意用户输入!),并且操作非常缓慢。