【发布时间】:2016-05-17 19:45:27
【问题描述】:
我正在学习 Ruby on Rails 教程,我对这个代码块很好奇:
if remember_digest.nil?
false
else
BCrypt::Password.new(remember_digest).is_password?(remember_token)
end
if remember_digest.nil?和if remember_digest == nil之间有区别吗,还是这只是作者的偏好?
【问题讨论】:
-
虽然结果可能是一样的想提一下,
== nil在 Ruby 中并不常见,nil?是一个更常见的 Ruby 习语。因为nil是falsey你也可以写unless remember_digest(没有任何进一步的方法调用) -
我同意@spickermann 也有一个实际的区别
Object#nil?只是响应Qfalse而NilClass#nil?是唯一一个用Qtrue覆盖它的类,而==实际上会进行比较,因此虽然结果相同,但前者对解释器的影响较小(尽管非常小)。 -
@engineersmnky
Qfalse等实际上只与 C 内部相关。NilClass(nil) 和FalseClass(false) 是它们在 Ruby 中的实际表示。 -
鉴于
remember_digest可能是true或false值,您可能不想专门测试nil。你可能想做:remember_digest and BCrypt::Password.new(...)
标签: ruby