Ruby中没有运算符的惰性if语句

3
在 Ruby 中能实现这个吗?
variablename = true
if variablename
   puts "yes!"
end

不是这样的

variablename = true
if variablename == true
   puts "yes!"
end

编辑: 还考虑具有以下功能:
variablename = 0 #which caused my problem

我无法让它正常工作。这种说法是否可行?我现在正在学习Ruby,虽然在PHP中可能是可行的,但我不确定如何在Ruby中正确实现。


3
说类似于“我无法让它工作”这样的话并不能帮助任何人诊断你做错了什么;正如所示,它在我这里运行良好。 - Dave Newton
我将变量名设置为0,但是无法弄清楚为什么“它不起作用”。从下面可以看出,这是因为Ruby将0视为true。 - Tarang
我可以看到我在那里设置了true,但是这里我想问一下这种编码风格是否可行。我很抱歉。 - Tarang
3个回答

9
当然,这是可能的。
在Ruby中,除了nilfalse以外的所有内容都被视为true。这意味着:
var = 0
if var
  # true!
end

var = ''
if var
  # true!
end

var = nil
if var
  # false
end

有趣。就是那个“0”让我困惑了。 - Tarang
3
它并非被视为“true”,而只是“truthy”,因此仅在查询真实性的语句中(例如ifcase)等效。但如果您将truthy值与“true”进行比较,则仍会得到不相等的结果。 - Holger Just

3

xdazz和Vlad的答案是正确的,所以你需要单独捕获0

variable = false if variable.zero?  # if you need 0 to be false
puts "yes!" if variable             # now nil, false & 0 will be considered false

2
一种更“Ruby”的方式是variable = false if variable.zero?。话虽如此,人们应该理解语言的限制,并且不要在这种情况下使用零。 - Jakobinsky
谢谢,我已经更新了我的答案以反映这一点。你说得对,关于Ruby中的设计选择,但如果这是需要采取行动的业务逻辑问题而不是编程选择,那么这是合适的。 - Thomas Nadin

1

完全有可能。在 Ruby 中,只有 nilfalse 被认为是假的,任何其他值都是真的。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接