2014-03-31 44 views
0
class BankAccount 

    def self.create_for(first_name, last_name) 
    @accounts ||= [] 
    @accounts << BankAccount.new(first_name, last_name) 
    end 

    def initialize(first_name, last_name) 
    @balance = 0 
    @first_name = first_name 
    @last_name = last_name 
    end 

def self.find_for(first_name, last_name) 
    @accounts.find{|account| account.full_name == "#{first_name} #{last_name}"} 
    end 

    def full_name 
    "#{@first_name} #{@last_name}" 
    end 

end 

方法self.find_for如何工作?我對account變量如何訪問full_name方法感到困惑?變量有權訪問實例方法

bankacc = BankAccount.create_for "Kevin", "Shane" 
BankAccount.find_for("Kevin", "Shane") 
puts bankacc.inspect 
+1

爲什麼會讓你感到困惑? 'full_name'是一個簡單的實例方法,'account'是'BankAccount'的一個實例,所以你可以調用它的實例mehtod'full_name'。 – Mischa

回答

2

也許它可以幫助您理解如果將文件分成兩部分的概念。

此類創建和跟蹤的BankAccount實例:

class BankAccounts 
def self.create_for(first_name, last_name) 
    @accounts ||= [] 
    @accounts << BankAccount.new(first_name, last_name) 
end 

def self.find_for(first_name, last_name) 
    @accounts.find{|account| account.full_name == "#{first_name} #{last_name}"} 
end 
end 

這僅僅是一個愚蠢的類,它可以創建的實例:

class BankAccount 
    def initialize(first_name, last_name) 
    @balance = 0 
    @first_name = first_name 
    @last_name = last_name 
    end 

    def full_name 
    "#{@first_name} #{@last_name}" 
    end 
end 

self.create_for要創建一個新帳戶,將其放入BankAccounts中的「全局」(一個類變量)變量@accounts。您的新銀行帳戶實例存儲在@accounts中,因此當您使用self.find_for時,它可以在@accounts中查找。

@accounts.find{|account| account.full_name == "#{first_name} #{last_name}"}基本上意味着:

「看入@accounts陣列,併爲每個帳戶實例(也就是的BankAccount的一個實例)看全名相匹配full_name是我可以用它來檢查一個方法。 BankAccount實例「。

1

因爲你這樣編碼。

看線@accounts << BankAccount.new(first_name, last_name)

這意味着@accounts保存所有BankAccount對象。現在full_name是類BankAccount的實例的實例方法。

現在在下面線 -

@accounts.find { |account| account.full_name == "#{first_name} #{last_name}"} 

#find方法使每一個這樣的BankAccount對象(account)到塊,並account被調用方法full_name,屬於分類BankAccount的一個實例。

這裏沒有錯。