2016-06-04 3 views
0

나는 Dish라는 클래스를 만들었는데, 거기서 많은 메뉴 객체, 이름과 가격을 포함하는 메뉴 항목, 초기화 된 메소드를 통해 얻은 정보를 만들었습니다. Ruby에서 인스턴스화 된 객체 정보를 포함하는 해시 배열을 반복하는 방법은 무엇입니까?

chickenstew = Dish.new("Chicken Stew", 4.50) 

를 호출 할 때 I는 상기 방법 및 def add_to_menu @menu << args를 사용하여, 메뉴라고하는 새로운 클래스의 인스턴스 변수를 포함 @menu = [] 배열 이러한 개체들을 첨가. 나는 개별 개체를 포함하는 새 메뉴 배열을 표시 할 때, 다음과 같이 분명히 이름과 가격 정보 이외에, 오브젝트 정보를 얻을 :

[[#<Dish:0x007f9662134818 @dish={:name=>"Chicken Stew", :price=>4.5}>, 
    #<Dish:0x007f966206ec30 @dish={:name=>"Beef & Ale Pie", :price=>5.0}>, 
    #<Dish:0x007f966101a7a8 @dish={:name=>"Chicken & Leek Pie", :price=>4.0}>, 
    #<Dish:0x007f9662365420 @dish={:name=>"Vegetable Pie", :price=>3.5}>, 
    #<Dish:0x007f96622de038 @dish={:name=>"Fish Pie", :price=>5.5}>, 
    #<Dish:0x007f966224f068 @dish={:name=>"Chips", :price=>2.0}>, 
    #<Dish:0x007f966222c1d0 @dish={:name=>"Mushy Peas", :price=>1.5}>]] 

내 질문은,이 땅에서이 반복 어떻게 해시 배열, 이름과 가격 정보를 추출하기 위해서는 puts 화면에 표시 하시겠습니까? 나는 @menu.each { |hash| puts "Item: #{hash[:name]. Price: £#{hash[:price]}" } 시도했지만이 분명히 실패하고 나는 그런 같은 오류의 끝 얻을 '형식 오류를 : 정수로 기호의 암시 적 변환'

어떤 도움도 인정되지 않을 것입니다.

+0

당신은'[[..]]'을 가지고 있으므로 @menu [0] .each {..'가 작동합니다. '해시'라고 생각하는 것은 실제로'AR' 객체 인'Dish' 객체입니다. –

+0

그 도움에 대한 건배, 그것은 불행히도,하지만 그게 아니라 코드를 시도하는 것보다 dish.name과 dish.price를 호출해야하지만 그걸로 [0]을 추가해야 할 수도 있습니다. 건배! – sdawes

+0

아니요. 오류는 '@menu.each {| hash | ', 여기서 여러분이 생각하는 '해시'는 내부 '배열'입니다. 그리고 당신은'[: name]'이라고 불렀고 그것은 오류를 던집니다. 그래서 @menu [0] .each {| hash | 항목 : # {hash [: name]. 가격 : £ # {hash [: price]} "}'역시 작동합니다. –

답변

3

이것은 배열 내부의 해시가 아닙니다. 이것은 Dish 클래스의 객체입니다 :

@menu.first.each { |dish| puts "Item: #{dish.name}. Price: £#{dish.price}" } 
+0

놀랍지 만, 완벽하게 작동했습니다. 매우 빠른 답장을 보내 주셔서 감사합니다. – sdawes