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

Ruby编程-无法使用默认值初始化实例变量,ruby,ruby-1.9.3,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) pu

在下面的代码中,我为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=method(如下所示,没有参数)时,我希望它输入10,但它没有输出默认值

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

account1.accountNumber = 10
使用account1.accountNumber=而不传递值是很奇怪的

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

def initialize
  @accountNumber = 10
end
然后

account1.accountNumber = 10
使用account1.accountNumber=而不传递值是很奇怪的

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

def initialize
  @accountNumber = 10
end
然后


我不能完全确定,但由于方法名以=。这种类型的方法似乎不能正确地接受默认值。当您将方法名称更改为set_account_number时,它将起作用。

我不能完全确定,但由于方法名称以=。这种类型的方法似乎不能正确地接受默认值。当您将方法名称更改为设置帐户号码时,它将起作用。

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。

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。

您正在为setter方法分配一个空表达式。在Ruby中,空表达式的计算结果为nil,它们的计算结果还会是什么?因此,您将赋值为nil。

您将一个空表达式赋值给setter方法。在Ruby中,空表达式的计算结果为零,它们的计算结果还将是什么?因此,您将赋值为零。

如果它没有达到您期望的效果,它在做什么?这是一个很好的问题,我曾考虑过使用+1,但询问它的方式对读者不友好,所以我使用了-1。从你的代码中删除所有不相关的东西,我会做+1。如果它没有做你期望的事情,它在做什么?这是一个好问题,我想做+1,但它的提问方式对读者不友好,所以我做了-1。从你的代码中删除所有不相关的东西,我会做+1。谢谢是的,这看起来确实是这样,当我从方法名中删除=时,它工作得很好…谢谢是的,这看起来确实是这样,当我从方法名中删除=时,它工作得很好…谢谢,和jboursiquot…使用默认值初始化并按照您的建议使用特定值可选地调用setter有效…感谢ck3g,和jboursiquot…使用默认值初始化并按照您的建议使用特定值可选地调用setter有效。。。