在Ruby中将nil对象添加为数组元素

在Ruby中将nil对象添加为数组元素,ruby,Ruby,我可以有一个数组,其中的值是nil,例如[1,3,nil,23] 我有一个数组,我在其中赋值为nil,就像这样array=nil,然后我想遍历它,但我不能。.each方法无法说出nil类 可以这样做吗?使用: a = [nil] 例如: > a = nil => nil > a.each{|x|puts x} NoMethodError: undefined method `each' for nil:NilClass from (irb):3 from :0

我可以有一个数组,其中的值是
nil
,例如
[1,3,nil,23]

我有一个数组,我在其中赋值为
nil
,就像这样
array=nil
,然后我想遍历它,但我不能。
.each
方法无法说出
nil

可以这样做吗?

使用:

a = [nil]
例如:

> a = nil => nil > a.each{|x|puts x} NoMethodError: undefined method `each' for nil:NilClass from (irb):3 from :0 > a= [nil] => [nil] > a.each{|x|puts x} nil => [nil] >a=零 =>零 >a.每个{x}放置x} NoMethodError:nil:NilClass的未定义方法“each” 来自(irb):3 起:0 >a=[nil] =>[nil] >a.每个{x}放置x} 无 =>[nil]
我相信你的问题在于当你给数组“赋值为零”的时候

arr = []
arr = nil
这和你试着做的一样吗?在这种情况下,您没有将
nil
分配给数组,而是将
nil
分配给变量
arr
,因此
arr
现在是
nil
给出了有关“nil类”的错误使用可枚举映射

请注意,尽管数组中的每个项的返回值都为零,但原始数组仍保持原样。如果对数组中的每个项执行操作,它将返回每个操作的值。你可以摆脱零,买它

ruby-1.8.7-p249 > [1,2,nil,4].map{|item| item + 1 unless item.nil? }
 => [2, 3, nil, 5] 
ruby-1.8.7-p249 > [1,2,nil,4].map{|item| item + 1 unless item.nil? }.compact
 => [2, 3, 5] 

我认为将项添加到数组与将值nil分配给变量是混淆的

向数组(末尾)添加项(两种方式):

array.push(项目)
#或者如果你愿意的话

数组当然可以。您可能正在尝试对
nil
对象执行某些操作,而没有先检查它是否为
nil?

C:\work>irb
irb(main):001:0> a = [1,2,nil,3]
=> [1, 2, nil, 3]
irb(main):003:0> a.each{|i|
irb(main):004:1* if i.nil? then
irb(main):005:2* puts ">NADA>"
irb(main):006:2> else
irb(main):007:2* puts i
irb(main):008:2> end
irb(main):009:1> }
1
2
>NADA>
3
=> [1, 2, nil, 3]
irb(main):010:0>

如何在数组中存储nil值存在问题。下面是一个示例,演示阵列如何工作:

a = nil
b = [nil]
c = []
c.push(nil)

# a is nil
# b is [nil]
# c is now [nil]
因此,'b'和'c'都创建了一个具有nil属性的数组,而'a'只是将一个变量设置为nil(而不是数组)

使用“b”或“c”,您现在应该能够毫无问题地运行
。每个

C:\work>irb
irb(main):001:0> a = [1,2,nil,3]
=> [1, 2, nil, 3]
irb(main):003:0> a.each{|i|
irb(main):004:1* if i.nil? then
irb(main):005:2* puts ">NADA>"
irb(main):006:2> else
irb(main):007:2* puts i
irb(main):008:2> end
irb(main):009:1> }
1
2
>NADA>
3
=> [1, 2, nil, 3]
irb(main):010:0>
a = nil
b = [nil]
c = []
c.push(nil)

# a is nil
# b is [nil]
# c is now [nil]