如何在Ruby中引用数组成员?

时间:2014-08-09 15:46:57

标签: ruby

在Ruby中给出这个数组:

myarray = [name: "John", age: 35]

我如何参考年龄?

我尝试myarray[:age]但收到错误can't convert Symbol into Integer

更新

我试图通过提取我认为我的问题是什么来简化我的问题。我可能完全不理解。

我正在试验Dashing并试图将数字发送到计量器小部件。我创建了一个变量' response_raw'我正试图在第三次发送活动中发送它。这是我的代码:

SCHEDULER.every '1m', :first_in => 0 do
    # Get checks
    url = "https://#{CGI::escape user}:#{CGI::escape password}@api.pingdom.com/api/2.0/checks"
    `enter code here`response = RestClient.get(url, {"App-Key" => api_key})
    response = JSON.parse(response.body, :symbolize_names => true)

    if response[:checks]
      checks = response[:checks].map { |check|
        if check[:status] == 'up'
          state = 'up'
          last_response_time = "#{check[:lastresponsetime]}ms"
          response_raw = check[:lastresponsetime]
        else
          state = 'down'
          last_response_time = "DOWN"
          response_raw = 0
        end

        { name: check[:name], state: state, lastRepsonseTime: last_response_time, pt: response_raw }
      }
    else
      checks = [name: "pingdom", state: "down", lastRepsonseTime: "-", pt: 0]
    end

    checks.sort_by { |check| check['name'] }
    send_event('pingdom', { checks: checks })
    send_event('pingdom-meter', { value:  checks[:pt] })                                                                                                                        
  end

2 个答案:

答案 0 :(得分:1)

在CoffeeScript中[name: "John", age: 35]是一个包含单个对象的数组,该对象具有两个属性(nameage)。

以下是纯JavaScript的外观:

myarray = [
  {
    name: "John",
    age: 35
  }
];

因此,回答您的问题,要访问age,您应该获取数组的第一个元素,然后引用age属性:

myarray[0].age

myarray[0]['age']

但是,从您的问题来看,您可能使用了错误的数据结构。为什么不想使用普通对象而不是数组?

person = name: "John", age: 35
console.log "#{person.name}'s age is #{person.age}"

更新

看起来您的问题实际上是关于Ruby而不是关于CoffeeScript。虽然,我的答案将保持不变。

要访问age,您应该获取数组的第一个元素,然后引用age属性:

myarray[0][:age]

由于myarray是一个数组,因此Ruby需要一个整数索引,但你要给它一个符号:age

答案 1 :(得分:0)

我终于在列昂尼德的帮助下弄明白了。谢谢。

我改变了:

send_event('pingdom-meter', { value:  checks[:pt] })

send_event('pingdom-meter', { value:  checks[0][:pt] })