2013-11-15 35 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,它实际上是。与哈希相比,数组拥有完全不同的方法。如果他的'连接'函数将数组视为散列,他可能会遇到麻烦。作为编辑,我会留下更详细的解释。 –

相关问题