If 语句运算符作为 ruby 中的变量

If statement operator as a variable in ruby

我正在尝试在 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

将运算符用作变量并不是对表达式求值。有什么方法可以做到这一点。

试试这个

x = 0
y = 1
z = "!="

x.public_send(z, y)
=> true

这里的技巧是知道 3 >= 53.>=(5)

的语法糖

为了重申上面的答案,我建议使用 send

但是, 可以按照您原来的风格编写代码 - 您只需要 eval(即执行)它:

x = 0
y = 1
z = "!="

if eval("x #{z} y")
  puts "True"
end

一般来说,强烈建议不要使用 eval。它可能会导致重大安全问题(例如,如果您正在评估任意用户输入!),并且操作非常缓慢。