2015-10-20 64 views
0

我試圖將用戶輸入作爲參數傳遞給構造函數,而不是將它傳遞給一個方法。當我這樣做時,我在第20行(或創建構造函數的地方)出現錯誤消息「in initialize:錯誤的參數數量爲< 1 for 0>」。爲什麼構造函數不會參數?將用戶輸入傳遞給構造函數Ruby

class Beginnerbudget 
    def rate_savings(amount) 
     @amount = amount 
     if amount >= 501 
      puts "You have $#{amount} in your account. Keep up the good 
      work!" 
     elsif amount <= 500 && amount >= 101 
      puts "You only have $#{amount} in your account. Try and save 
      a little more this month." 
     else amount < 100 
      puts "Yikes, you only have $#{amount} in your account! Sell 
      a kidney quick!" 
     end 
     end 
    end 

puts "How much money do you have in your checking account?" 
amount = gets.chomp.to_i 

beginner_budget = Beginnerbudget.new(amount) 
beginner_budget.rate_savings` 

回答

0

幾乎得到它。應該先創建beginner_budget,方法是將其設置爲Beginnerbudget的新實例。然後,使用beginner_budget,您可以調用Beginnerbudget中的任何方法並傳遞特定方法所需的任何參數。

amount = gets.chomp.to_i 

beginner_budget = Beginnerbudget.new 
beginner_budget.rate_savings(amount) 

只是要注意,傳遞一個參數Beginnerbudget.new(argument)意味着該參數是爲你在那類有一個initialize方法。因此,這將工作:

class Beginnerbudget 
    def initialize(name) 
    @budget_name = name 
    end 
    def print_budget(amount) 
    puts "#{@name}: #{amount}" 
    end 
end 

some_budget = Beginnerbudget("Gas") 
some_budget.print_budget(10) 

回報Gas: 10

編輯:

另外,我建議刪除以下:@amount = amount。在這種情況下,不需要創建實例變量,因爲您將參數傳遞給您的方法,因此參數的範圍在那裏並且有效。

如果您想在類中的多個方法中使用變量,那麼實例變量非常好。它將範圍擴展到班級中的所有方法。