-1

菜鸟在这里红宝石。我有这个数据库连接数组

@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")

并将它放在一个变量中,就像我上面的例子一样。顺便说一句,我是 ruby​​ 新手,它是哈希与数组的问题,如下面的答案。我为我的问题感到困惑表示歉意:)

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 回答