>> current_user.first_visit
=> 0
>> if current_user.first_visit
>> puts "test"
>> end
test
=> nil
为什么会打印出test?>> current_user.first_visit
=> 0
>> if current_user.first_visit
>> puts "test"
>> end
test
=> nil
为什么会打印出test?nil
可以被看作是与false
类似的东西。不能假设0
、""
或[]
代表false
,因此必须使用== 0
、.blank?
、.empty?
、.zero?
等方法。nil
并不总是像false
一样运作。例如,在字符串内插时,会对#{}
的内容应用.to_s
方法,这在FalseClass
和NilClass
上的处理方式是不同的:irb(main)> "qwe #{false} rty"
=> "qwe false rty"
irb(main)> "qwe #{nil} rty"
=> "qwe rty"
.blank?
,.empty?
是Rails框架(通过activesupport
提供)提供的扩展,不可用于Ruby标准或核心库中。
另外,不同的行为是因为"#{false}"调用了to_s
方法。 - Swanandzero?
和 empty?
存在于核心库中(不过我不确定你所想的是哪些类)。 - Mladen Jablanovićcurrent_user.visit_counter > 0
current_user.visit_counter >= 1
current_user.visit_counter != 0
>> current_user.first_visit
=> 0
>> if current_user.first_visit != 0
>> puts "test"
>> else
>> puts "fail"
>> end
fail
=>nil
在检查数字值时,您还需要将其与预期值匹配
.zero?
是普通的 Ruby 语法:APIdock.com 链接 - Andrew Grimm