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
答案 0 :(得分: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
中,您正在创建一个新帐户,并将其放入变量@accounts
,即&#34; global&#34; BankAccounts中的(类变量)。您的新银行帐户实例存储在@accounts
中,因此当您使用self.find_for
时,它可以查看@accounts
以便在那里找到它。
@accounts.find{|account| account.full_name == "#{first_name} #{last_name}"}
实质上意味着:
&#34;查看@accounts
数组,并查看每个帐户实例(即BankAccount的实例),查看全名是否匹配。 full_name
是我可以用来检查BankAccount
实例的方法。&#34;
答案 1 :(得分: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
。
这里没有错。