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的新手,它的哈希与数组问题如下面的答案。我为我的问题混淆而道歉:)
答案 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
。