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

  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 方法有什么区别。如果我有一个对象 test=Account.new() 以及为什么 test(30) 会出错。那不是假设使用参数 30 调用 setter 方法并设置余额吗?

4

1 回答 1

3

initializeAccount.new是在执行或时在新创建的对象上调用的方法Account.new(my_starting_balance)。在第一种情况下initialize将使用默认值0for调用,starting_balance在第二种情况下使用my_starting_balance.

当您执行where is class 的实例时,将balance=调用setter 方法。因此,如果您有以下代码,将在第 1 行(以 0 作为其参数)和在第 2 行(以 23 作为其参数)调用:my_account.balance = some_valuemy_accountAccountinitializebalance=

my_account = Account.new
my_account.balance = 23

当然,在这种情况下,我也可以编写以下内容,而根本不使用 setter 方法:

my_account = Account.new(23)

但是,这并不总是有效,因为有时您可能希望在对象已创建balance 后更改 的值。

如果我有一个对象 test=Account.new() 以及为什么 test(30) 会出错。

因为test(30)意味着“使用参数 30 调用方法”并且您的代码test中没有调用方法。test


关于代码的第二个粗体部分:正如注释所示,它设置了一个名为的类变量@@bank_name并定义了一个返回该变量值的类方法。

于 2012-08-02T09:50:03.553 回答