2011-11-27 2 views
1

이라고 생각 : (. 글로벌 변수 $itemsitem의 특성을 결정하는 일부 값에 몇 가지 문자열을 매핑하는 해시 개체입니다)루비 해시의 요소는 내가 루비의 함수가 정수

def find_item(keyword) 
    potential = [] 
    $items.each do |item| 
     puts item         # <-- for debugging purposes 
     if item["name"].downcase== keyword 
      potential << item["name"].downcase 
     elsif item["keywords"].index(keyword) != nil 
      potential << item["name"].downcase 
     end 
    end 
    return potential 
end 

을 나는 그것이 이상 반복되는 현재 항목을 puts

은 (주석으로 라인 그냥 않습니다), 그것은 나를 제공 :

{"name"=>"Thing1", "keywords"=>["thing", "green"], ...}

하지만 난 (확실히 Thing1을 반환해야 함) 다음 줄에 item["name"]을하려고 할 때, 그것은 저를 제공합니다

C:/somepath/someprogram.rb:125:in '[]': can't convert String into Integer (TypeError)

답변

2

$items이 해시 인 경우, 다음 $items.each do |item|가에 [key, value]쌍 (배열)을 얻을 것입니다 블록. 값만 원하면 each_value을 사용하십시오.

+2

키와 값이 모두 필요한 경우 destructuring bind를 사용하십시오. –

+1

"destructuring bind"가 알려지지 않은 경우 (저는 루비 커뮤니티에서 들어 본 적이 없습니다), 그는'$ items.each do | key, value | '와 같은 것을 의미합니다 –

+0

아, 그게 문제인 것 같습니다.) 감사! – itdoesntwork