空的区别?没有?方法

时间:2012-02-05 15:58:05

标签: ruby

你能解释为什么空吗?没有?方法返回不同的结果?

ruby-1.9.2-p0 > [].empty?
 => true 
ruby-1.9.2-p0 > {}.nil?
 => false 
ruby-1.9.2-p0 > {}.empty?
 => true 
ruby-1.9.2-p0 > [].empty?
 => true 
ruby-1.9.2-p0 > [].nil?
 => false 

5 个答案:

答案 0 :(得分:3)

我猜你是来自python?由于各种设计原因,Python和其他语言可能会非常松散。

Ruby采用严格的方法。

零?仅用于测试零(无值)。

空?正在测试其中没有任何内容的容器(数组,哈希)。

搜索有关这些方法的ruby文档。例如,here对于数组是空的。

您可能也想this tutorial

答案 1 :(得分:1)

因为空和零是不同的概念? :)

空? - >这里什么都没有

无? - >空

答案 2 :(得分:1)

您的问题在此完全被发现:http://www.ruby-forum.com/topic/160638

答案 3 :(得分:1)

empty?通过适用于该对象的任何定义返回对象是否为“空”。并非所有对象都响应empty?。例如,for Array, empty? is defined as

  

如果true不包含任何元素,则返回self

     

[].empty? #=> true

nil?只有在调用nil本身时才返回true。您可以在始终返回false的{​​{3}}和true中始终返回[1].empty? #=> false [].empty? #=> true Object.new.nil? #=> false nil.nil? #=> true 的位置看到此内容。

{{1}}

答案 4 :(得分:0)

empty?,顾名思义,测试一个对象为空,而不是nil。该对象也不一定实现empty?。另一方面,nil?测试一些实例是nil(再次,顾名思义) - 如果它是空的,则不是。

nil.nil? # true; yup, it's nil. Calling .empty? will result in an error.
anythingElse.nil? # false, it's not nil.
[1, 2].empty? # false; 2 elements
{"blah" => 2}.empty? # false, it has stuff

nil是一个无对象,不是一个空数组。