【问题标题】:Ruby Hash bug help!Ruby 哈希错误帮助!
【发布时间】:2011-04-17 00:37:09
【问题描述】:

我正在尝试创建对象的 Ruby 哈希,其中键是对象 @name 成员:

# m is an object with an @name instance variable (a string)
myHash = {}
myHash[m.name] = m

它给出了这个错误:

#<TypeError: can't convert String into Integer>

有人知道为什么吗?我确定 m.name 是一个有效的字符串...

【问题讨论】:

  • 在一行上单独调用 m.name 会发生什么?
  • 非常肯定,请使用p m.name.class,但我想,无论如何,问题出在其他地方...您在此处粘贴的这两行代码之间没有任何其他代码行吗?
  • 最好在上面的代码中加上m.name的声明。
  • 实际上错误信息与您一致,即 m.name 是一个字符串。它说它想要一个整数。这会让我认为 myHash 是一个数组,除非您之前将它定义为行上的哈希(除非实际代码实际上比这更复杂)......展示问题的可运行代码示例会很好。
  • 啊,谢谢 sepp2k 让我开始这样做......我意识到我不小心重用了一个变量名来作为一个数组的哈希值...... doh! +1

标签: ruby string hash integer typeerror


【解决方案1】:

这个 irb 示例有帮助吗?

> class MyClass
>   attr_reader :name
>   def initialize
>     @name = "myname"
>   end
> end
=> nil
> m = MyClass.new
=> #<MyClass:0x47c3e0 @name="myname">
> puts m.name
myname
=> nil
> myHash = {}
=> {}
> myHash[m.name] = m
=> #<MyClass:0x47c3e0 @name="myname">
> puts myHash.inspect
{"myname"=>#<MyClass:0x47c3e0 @name="myname">}
=> nil

注意attr_reader :name,它为 name 创建了一个 getter 方法。

【讨论】:

  • 谢谢布赖恩,但我有一个 attr_accessor
【解决方案2】:

不小心重用了一个数组变量名...哎呀!

出于某种原因,我认为哈希在欺骗我,因为我之前没有在 Ruby 中使用过哈希...

【讨论】:

    猜你喜欢
    • 2011-03-24
    • 1970-01-01
    • 2011-11-07
    • 1970-01-01
    • 1970-01-01
    • 2017-04-21
    • 2011-04-01
    • 1970-01-01
    相关资源
    最近更新 更多