在下面的代码中,我给出了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=()
答案 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
。