2013-10-21 15 views
0

在Ruby中工作,我得到一個錯誤說未定義的局部變量或方法「食物」

'add': undefined local variable or method 'food' for #<FoodDB:... 

這是我試圖運行

require_relative 'FoodDB.rb' 

class Manager 
    def initialize 
    food = FoodDB.new 
    self.create_foodDB(food) 
    end 

    def create_foodDB(food) 
    counter = 1 
    word = [] 
    file = File.new("FoodDB.txt","r") 
    while (line = file.gets) 
     food.addFood(line) 
     counter = counter + 1 
    end 
    file.close 
    end 
end 

manager = Manager.new 

input_stream = $stdin 
input_stream.each_line do |line| 
    line = line.chomp 
    if line == "quit" 
    input_stream.close 
    end 
end 

這是FoodDB代碼。 rb的代碼

class FoodDB 
    def initialize 
    food = [] 
    end 

    def addFood(str) 
    food.push(str) 
    end 
end 

我不確定是什麼問題,因爲它似乎我肯定從FoodDB類調用正確的方法。所有的幫助表示感謝,謝謝!

+0

可否請您提供錯誤代碼行? – Pavel

+0

順便說一下,R​​uby中的約定是爲類和'snake_case'使用'CamelCase'作爲常量,變量和方法名稱。 –

+0

其他一些觀察:1.'self.create_foodDB(食物)'可以寫成'create_foodDB(食物)'; 2.在'create_foodDB()'中,'counter'和'word'不被使用;和3.你可以寫'如果line.chomp =='退出''並刪除前一行。 –

回答

0

您需要在FoodDB類改變food實例變量:

class FoodDB 
    def initialize 
    @food = [] 
    end 

    def addFood(str) 
    @food.push(str) 
    end 
end 

一個實例變量將在整個實例的所有可用的方法,當你使用的食品變量是本地的詞彙範圍,即僅在initialize方法中可用。

相關問題