【发布时间】:2010-12-11 21:58:24
【问题描述】:
是否有关于如何区分.nil?、.blank? 和.empty? 的指南?
我通常对何时在我的应用程序中使用它们感到困惑,因为它们似乎都意味着相同的东西,但具有不同的含义。
有人有关于血腥细节的备忘单吗?
【问题讨论】:
标签: ruby-on-rails ruby
是否有关于如何区分.nil?、.blank? 和.empty? 的指南?
我通常对何时在我的应用程序中使用它们感到困惑,因为它们似乎都意味着相同的东西,但具有不同的含义。
有人有关于血腥细节的备忘单吗?
【问题讨论】:
标签: ruby-on-rails ruby
在这里,我制作了一张包含所有案例的有用表格
【讨论】:
nil.blank? 返回undefined method 错误。我使用object.to_s.empty?。当对象为nil 或empty 字符串时,它返回true。
object.to_s.empty? 在普通 ruby 中使用时有一个缺点 - 如果未定义对象变量,则会引发 NameError 异常。
nil? - 检查变量是否引用了对象
empty? - 可用于检查各种对象类型,例如 empty string "" 或 empty array []
blank? - 检查nil? 或empty?。
【讨论】:
blank?,而不是empty?,例如" \n \t"
nil 的描述不准确,因为nil.nil? 是正确的,但nil 是NilClass 的对象。
blank?,这里是如何挑选这一点:require 'active_support/core_ext/object/blank (source)
nil? 定义在所有 Objects 上,它只在 nil 单例上返回 true。
blank? 也在所有对象上定义,如果对象也响应 empty? 并且为空,或者是 false 类型值(!object 始终为 @987654330 @)。
empty? 定义在多个集合对象上,如果它没有元素,则为 true。它也在String上定义。
注意 blank? 是 ActiveSupport 而不是在 Rails 1.8 中。
【讨论】:
我找到了一个很好的解释here:
没有?测试对象是否是 完全为零,那就是它是否是 一个并且只想要一个实例 无类。
空的?是一些对象的方法 回应。你需要检查 每个案例的文档。为了 例如,空数组是一个 不是 nil (它是一个数组对吗?)并且 没有元素。一个空字符串是 一个不为零的(它是一个字符串 对吧?)并且没有字节,什么都没有。
空白?您要求的方法不 属于Ruby,是Rails 延期: http://api.rubyonrails.com/classes/Object.html#M000011.
如果您点击该帖子末尾的链接,您会发现blank? 方法只是结合了nil? 和empty? 方法调用。
【讨论】:
String containing only "blank" characters is regarded as blank? but not empty?, e.g. " \n \t",正如@xhh 在此问题的另一个答案中所写。