2013-11-15 57 views
-1

在紅寶石noob這裏。我有這樣的陣列數據庫連接哈希變量數組(TypeError:不能將符號轉換爲整數)

@db_connection = [:host => "localhost", 
     :port => 3306, 
     :username => "user", 
     :password => "password"] 

的,但是當我使用它像

connection(@db_connection) 

返回我這個錯誤

TypeError: can't convert Symbol into Integer 

陣列處於連接靜態放置在工作()但是當它把它作爲一個變量時,它會給出一個錯誤。


編輯: 我放在它裏面connection方法

connection(:host => "localhost", 
      :port => 3306, 
      :username => "user", 
      :password => "password") 

並把它放在像上面我的示例的變量。順便說一句,我新來紅寶石,它的哈希與陣列問題如下答案。我的混亂道歉,我的問題:)

+1

如果您指的是哈希文字,請使用「{..}」而不是「[...]」。 – falsetru

+0

你可以分享失敗和後續的代碼嗎?順便說一句,你已經展示了一個數組文字(包含一個包含四個鍵/值對的散列),而不是一個散列變量。 –

+0

請參閱'編輯' – Ryan

回答

3

{}寫您的哈希......作爲Hash

@db_connection = {:host => "localhost" 
        :port => 3306, 
        :username => "user", 
        :password => "password"} 

或者使用新的Ruby >= 1.9風格

@db_connection = {host: "localhost" 
        port: 3306, 
        username: "user", 
        password: "password"} 

的問題出在您的代碼

@db_connection = [:host => "localhost", 
        :port => 3306, 
        :username => "user", 
        :password => "password"] 

其中包含一個包含在數組中的散列值。

[{:host=>"localhost", :port=>3306, :username=>"user", :password=>"password"}] 

它是有效的Ruby代碼,但只要你connection方法得到它,它可能掙扎它的工作。


編輯:使用精簡例子,這裏就是我猜發生了什麼。

def connection options 
    puts "host is #{options[:host]}" 
end 

connection [host: "localhost"] 

# TypeError: no implicit conversion of Symbol into Integer 

這裏發生的事情是你想上的一組訪問Symbol指數(:host)。但是,因爲數組是數字索引的,所以數組試圖將符號轉換爲整數,而不能。因此TypeError

+0

這並不能解釋爲什麼如果OP將該數組文字傳遞給'connection'而不是實例變量,OP會得到不同的結果。 –

+0

太棒了!現在我知道 – Ryan

+0

@PeterAlfvin,它實際上是。與哈希相比,數組擁有完全不同的方法。如果他的'連接'函數將數組視爲散列,他可能會遇到麻煩。作爲編輯,我會留下更詳細的解釋。 –

相關問題