Ruby on rails 不带运算符的Ruby lazy if语句
在ruby中可以做到这一点吗Ruby on rails 不带运算符的Ruby lazy if语句,ruby-on-rails,ruby,Ruby On Rails,Ruby,在ruby中可以做到这一点吗 variablename = true if variablename puts "yes!" end 而不是这个 variablename = true if variablename == true puts "yes!" end 编辑: 还考虑: variablename = 0 #which caused my problem 我不能让它工作。如果可能的话,这是一种说法吗?我现在正在学习ruby,这在PHP中是可能的,但我不确定如何在rub
variablename = true
if variablename
puts "yes!"
end
而不是这个
variablename = true
if variablename == true
puts "yes!"
end
编辑:
还考虑:
variablename = 0 #which caused my problem
我不能让它工作。如果可能的话,这是一种说法吗?我现在正在学习ruby,这在PHP中是可能的,但我不确定如何在ruby中正确地使用它当然,这是可能的
在ruby中,除了nil
和false
之外的所有内容都被视为true。意思是:
var = 0
if var
# true!
end
var = ''
if var
# true!
end
var = nil
if var
# false
end
这是可能的。在ruby中,只有
nil
和false
被视为false,任何其他值都是true。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
有趣。令我困惑的是“0”并没有被视为
true
,而只是truthy,因此只有在查询真实性的语句中(例如if
或case
)它才是等效的。但是,如果你将真实值与true
进行比较,你仍然会得到不平等的结果。说“我无法让它工作”这样的话无助于任何人诊断你做错了什么;如图所示,它对我来说很好。我把它设置为我的variablename=0,但无法理解为什么“它不起作用”。从下面我可以看到ruby认为0是真的,我可以看到我在那里设置了真,但这里我问这种编码风格是否可行。如果variable.zero?,则更为“ruby”的方法是variable=false。话虽如此,我们应该理解语言的局限性(?),不要在这种情况下使用零。谢谢,更新了我的答案以反映这一点。在ruby中所做的设计选择是正确的,但如果这是一个需要处理的业务逻辑问题,而不是一个编程选择,那么它是合适的。