2012-08-02 25 views
1
class Account 
    def initialize(starting_balance = 0) 
    @balance = starting_balance 
    end 

    def balance #instance getter method 
    @balance #instance variable visible only to this object 
    end 

紅寶石,是什麼和初始化一個setter之間的差值方法

def balance=(new_amount) 
    @balance = new_amount 
    end 

def deposit(amount) 
    @balance+=amount 
    end 

@@bank_name= "MyBank.com" # class (static) variable 

    # A class method 
    def self.bank_name 
    @@bank_name 
    end 
    # or: def SavingsAccount.bank_name : @@bank_name : end 

end 

我想了解粗體代碼片段。他們在做什麼? setter和initialize方法有什麼區別。 如果我有一個對象測試= Account.new(),爲什麼測試(30)給出一個錯誤。是不是假設用參數30調用setter方法並設置餘額?

回答

3

initialize是當您執行Account.newAccount.new(my_starting_balance)時在新創建的對象上調用的方法。在第一種情況下,initialize將被調用,默認值0starting_balance,第二種情況下爲my_starting_balance

設置方法balance=在您執行時調用my_account.balance = some_value其中my_accountAccount類的實例。所以,如果你有下面的代碼,initialize將第1行第2行(23)作爲參數調用(以0作爲參數)和balance=

my_account = Account.new 
my_account.balance = 23 

當然,在這種情況下,我可以只並寫上如下而不是在所有使用setter方法:

my_account = Account.new(23) 

但是這並不總是工作,因爲有些時候,你可能要改變後的對象已經創建的balance值。

如果我有一個對象test = Account.new(),爲什麼test(30)會給出一個錯誤。

因爲test(30)意味着「調用該方法test與參數30」並沒有所謂的在你的代碼test方法。


關於你的代碼的第二部分以粗體顯示:正如評論指出,這臺名爲@@bank_name類變量,並定義返回變量的值一類方法。

+0

謝謝您的詳細解答。在這裏學到了一些東西。 – Selvam 2012-08-08 04:21:19