1

以下のコードでは、accountNumberが特定の値で呼び出されていないが、その値がコードで認識されない場合のデフォルト値を指定していますが、それはなぜですか?

class BankAccount
   CONST=0100

   def interest_rate
        @@interest_rate = 0.2
   end

   def accountNumber
        @accountNumber
   end

   def accountNumber=(value = 10)
        puts value
        @accountNumber = value
   end
end

以下のように引数なしでaccountNumber=メソッドを呼び出すと、「10」が出力されると思いますが、デフォルト値は出力されません。

account1 = BankAccount.new()
puts account1.accountNumber=()
4

4 に答える 4

5
account1.accountNumber=(10)

と同じです

account1.accountNumber = 10

account1.accountNumber =値を渡さずに使用するのは奇妙です。

デフォルト値が必要な場合は、コンストラクター内で設定してください。

def initialize
  @accountNumber = 10
end

それから

account1 = BankAccount.new
puts account1.accountNumber # => 10
于 2012-11-30T08:04:54.303 に答える
4

ck3gの答えは正しいです。イニシャライザでデフォルトを設定するだけです。そのことを念頭に置いて、クラスを単純化して

class BankAccount
   CONST=0100
   attr_accessor :accountNumber

   def initialize(accountNumber = 10)
     @accountNumber = accountNumber
   end

   def interest_rate
     @@interest_rate = 0.2
   end
end

これにより、rubyはaccountNumber属性のゲッターとセッターを自動的に処理できます。

于 2012-11-30T08:12:14.497 に答える
1

完全にはわかりませんが、メソッド名が。で終わっているため、多少の不規則性があるよう=です。このタイプのメソッドは、デフォルト値を正しく受け入れていないようです。メソッド名をに変更するset_account_numberと、機能します。

于 2012-11-30T08:06:28.307 に答える
0

()setterメソッドに空の式を割り当てています。Rubyでは、空の式はnil(とにかく他に何を評価しますか?)と評価されるため、を割り当てnilます。

于 2012-11-30T14:22:57.973 に答える