2010-09-24 87 views
0

我試圖創建對象的一個​​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是一個有效的字符串...

+0

當你調用m.name上本身就是一個行會發生什麼? – 2010-09-24 22:20:21

+1

可以肯定的是,使用'p m.name.class',但我想,無論如何,問題是在別的地方......你在這兩個粘貼的這兩個之間沒有任何其他代碼行嗎? – Nakilon 2010-09-24 22:23:01

+0

最好將'm.name'的聲明添加到上面的代碼中。 – randomguy 2010-09-24 22:25:51

回答

0

不小心重複使用了一個數組的變量名... oops!

出於某種原因,我認爲散列值被欺騙了我,因爲我沒有用一個Ruby的前...

0

這個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方法。

+0

感謝Brian,但我有一個attr_accessor – 2010-09-25 07:20:40