散列变量到数组(TypeError:无法将Symbol转换为整数)

时间:2013-11-15 06:48:59

标签: ruby arrays

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

并将其放在一个变量中,就像上面的例子一样。 BTW,我是ruby的新手,它的哈希与数组问题如下面的答案。我为我的问题混淆而道歉:)

1 个答案:

答案 0 :(得分: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)。但是,因为数组被数字索引,所以Array试图将符号转换为整数,但它不能。因此TypeError