2011-02-09 26 views
0

我有一個函數可以通過一個對象數組,並根據原始數組中的某些屬性創建一個新的對象數組。當我運行這段代碼我得到錯誤爲什麼這個局部變量被標記爲undefined? - 紅寶石

在「馬不停蹄」:未定義的局部變量或方法主要`sort_list」:對象(NameError)

我確定sort_list陣列之外初始化的循環,並且我試着用特定大小初始化它,但是我一直得到這個錯誤。我對Ruby很新,所以我做錯了什麼?

def nonstop(flight_list) 
     index = 0 
     sort_list[] = nil 
     flight_list.each do |curr| 
     if (curr.depapt == ARGV[2] && curr.arrapt == ARGV[3]) 
      sort_list[index] = curr 
      index += 1 
     end 
     end 
     sort_list.sort! { |a,b| a.deptime <=> b.deptime} 
     sort_list.each do |curr| 
     puts "#{curr.flightnum}\t#{curr.deptime}\t#{curr.arrtime}" 
     end 
     if (sort_list.empty?) 
     puts "none" 
     end 
    end 
+0

你能告訴我們代碼,包括你說你在方法之外設置sort_list的位嗎?這可能不會做你認爲它的作用 – Gareth 2011-02-09 22:21:07

+0

@Gareth當我讀到它時,他說'在循環之外'。 – 2011-02-09 22:22:50

回答

3

我認爲你需要初始化它:

sort_list = [] 

這不適合我扔在irb錯誤。

2

你已經得到正確的答案。
我會做一些重構,這對新手很有用。

def nonstop(flight_list) 
    sort_list = flight_list.select { |curr| curr.depapt == ARGV[2] && curr.arrapt == ARGV[3] } 
    sort_list.sort_by! &:deptime 
    sort_list.each do |curr| 
    puts "#{curr.flightnum}\t#{curr.deptime}\t#{curr.arrtime}" 
    end 
    puts "none" if sort_list.empty? 
end 
2

這是爲什麼sort_list[] = nil不紅寶石工作:

[]就其本身而言是一個變量名呼籲變量[]Array.new

[]的快捷方式。所以在這方面[]是一種方法。

sort_list沒有設置任何東西,所以它是未定義的。因此sort_list[]在未定義的值上調用[]

將任何變量設置爲nil使其爲零類。