2014-03-31 190 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的一个实例。

这里没有错。