-1

ルビーでここにnoob。このデータベース接続の配列があります

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

しかし、私がそれを次のように使用すると

connection(@db_connection)

このエラーを返します

TypeError: can't convert Symbol into Integer

connection() に静的に配置すると配列は機能しますが、変数として配置するとエラーが発生します。


編集:私はそれをconnectionメソッド内に配置しました

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

上記の例のように変数に配置しました。ところで、ルビーは初めてで、以下の回答のようなハッシュと配列の問題です。私の質問を混乱させて申し訳ありません:)

4

1 に答える 1

3

あなたのハッシュを{}...でハッシュとして書いてください

@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.

于 2013-11-15T06:50:28.610 に答える