我試圖創建對象的一個Ruby哈希,其中的鍵是對象@name成員:Ruby哈希bug幫助!
# 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是一個有效的字符串...
我試圖創建對象的一個Ruby哈希,其中的鍵是對象@name成員:Ruby哈希bug幫助!
# 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是一個有效的字符串...
不小心重複使用了一個數組的變量名... oops!
出於某種原因,我認爲散列值被欺騙了我,因爲我沒有用一個Ruby的前...
這個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
它爲名稱創建一個getter方法。
感謝Brian,但我有一個attr_accessor – 2010-09-25 07:20:40
當你調用m.name上本身就是一個行會發生什麼? – 2010-09-24 22:20:21
可以肯定的是,使用'p m.name.class',但我想,無論如何,問題是在別的地方......你在這兩個粘貼的這兩個之間沒有任何其他代碼行嗎? – Nakilon 2010-09-24 22:23:01
最好將'm.name'的聲明添加到上面的代碼中。 – randomguy 2010-09-24 22:25:51