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

太字のコード スニペットを理解したい。彼らは何をしますか?セッターと初期化メソッドの違いは何ですか。オブジェクト test=Account.new() があり、なぜ test(30) がエラーを出すのですか? パラメータ 30 で setter メソッドを呼び出して残高を設定するということではないでしょうか。

4

1 に答える 1

3

initializeAccount.newまたはを実行したときに、新しく作成されたオブジェクトで呼び出されるメソッドですAccount.new(my_starting_balance)。最初のケースinitializeでは のデフォルト値で呼び出さ0starting_balance、2 番目のケースではmy_starting_balance.

where is an instance of the classを実行すると、 setter メソッドbalance=が呼び出されます。したがって、次のコードがある場合、は 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) がエラーを出すのですか?

「引数30でメソッドを呼び出す」ことtest(30)を意味し、コードでtest呼び出されるメソッドがないためです。test


コードの 2 番目の太字部分について: コメントが示すように、名前付きのクラス変数を設定し、@@bank_nameその変数の値を返すクラス メソッドを定義します。

于 2012-08-02T09:50:03.553 に答える