2010-08-12 69 views

回答

9

用途:

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

我相信你的問題就在於,當你 「指定無」 到數組

arr = [] 
arr = nil 

這是不是喜歡你試過嗎?在這種情況下,你不分配nil給數組分配nil給變量arr,因此arr現在nil給你關於「無級」

+0

是的,你是正確的我分配零變量arr .... – user384070 2010-08-12 21:24:57

0

使用可枚舉#地圖

ruby-1.8.7-p249 > [1,2,nil,4].map{|item| puts item} 
1 
2 
nil 
4 
=> [nil, nil, nil, nil] 

注意到的錯誤,即使數組中的每個項的返回值都是零,原始數組也是如此。如果您對數組中的每個項目執行操作,它將返回每個操作的值。你可以擺脫nils購買壓縮它。

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

我覺得你很困惑,將一個項目添加到一個數組中,並將一個值賦給一個變量爲零。

添加一個項目(結束)的陣列(雙向):

array.push(item) 
# or if you prefer 
array << item 
# works great with nil, too 
array << nil 

我假設數組已經存在。如果沒有,您可以使用array = []array = Array.new來創建它。

另一方面,array = nilnil分配給恰好(誤導性地)被命名爲'數組'的變量。如果該變量先前指向一個數組,則該連接現在被破壞。

您可能會想到索引位置的轉讓,但array[4] = nilarray = nil有很大不同。

3

當然可以。您可能試圖對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>