Ruby编程 - 无法使用默认值初始化实例变量

时间:2012-11-30 07:52:43

标签: ruby ruby-1.9.3

在下面的代码中,我给出了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 个答案:

答案 0 :(得分:5)

account1.accountNumber=(10)

相同
account1.accountNumber = 10

使用account1.accountNumber =而没有传递值是很奇怪的。

如果需要默认值,请在构造函数中设置它。

def initialize
  @accountNumber = 10
end

然后

account1 = BankAccount.new
puts account1.accountNumber # => 10

答案 1 :(得分: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。

答案 2 :(得分:1)

我无法完全确定,但由于方法名称以=结尾,因此似乎存在一些不规则性。这种类型的方法似乎没有正确接受默认值。当您将方法名称更改为set_account_number时,它将起作用。

答案 3 :(得分:0)

您正在为setter方法指定一个空表达式()。在Ruby中,空表达式的计算结果为nil(无论如何它们还会评估什么?),因此您要分配nil