【问题标题】:Ruby programming - unable to initialize instance variable with default valuesRuby 编程 - 无法使用默认值初始化实例变量
【发布时间】:2012-11-30 07:52:42
【问题描述】:

在下面的代码中,我为 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= 方法时,如下所示,没有 arg,我希望它输入“10”,但它没有输出默认值...

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

【问题讨论】:

  • 如果它没有按照您的预期进行,那么它在做什么
  • 这是一个很好的问题,我也想过做+1,但是问的方式对读者不友好,所以我做了-1。从你的代码中删除所有不相关的东西,我会做+1。

标签: ruby ruby-1.9.3


【解决方案1】:
account1.accountNumber=(10)

一样
account1.accountNumber = 10

在不传递值的情况下使用account1.accountNumber = 很奇怪。

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

def initialize
  @accountNumber = 10
end

然后

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

【讨论】:

    【解决方案2】:

    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 和 jboursiquot...使用默认值初始化并根据您的建议选择使用特定值调用设置器,工作...
    【解决方案3】:

    我不能完全确定,但由于方法名称以= 结尾,这似乎有些不正常。这种类型的方法似乎不能正确接受默认值。把方法名改成set_account_number就可以了。

    【讨论】:

    • 谢谢,确实如此,当我从方法名称中删除“=”时,它可以正常工作...
    【解决方案4】:

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

    【讨论】:

      猜你喜欢
      • 2014-08-25
      • 1970-01-01
      • 2017-04-05
      • 2013-01-17
      • 2016-06-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多