在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]