【问题标题】:difference between .nil? and == nil [duplicate].nil 之间的区别?和 == nil [重复]
【发布时间】: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


【解决方案1】:

没有区别。根据docs,只有nil 对象响应true 到nil?。

【讨论】:

  • 对我来说唯一真正的区别是.nil? 更简洁、更易读,并且需要更少的输入:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-01-23
  • 2012-06-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-03-23
  • 2022-01-24
相关资源
最近更新 更多