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

当我在没有 arg 的情况下调用 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 属性的 getter 和 setter。

于 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 回答