2014-02-15 3 views
-3

배열이 있는데 "each"라는 클래스 메서드를 만들어서 반환해야합니다. 어떤 경우에 사용할 필요가있는) 배열의 각 항목을 호출합니다.루비 배열을 반복하고 배열의 각 항목을 가져 오거나 (반환 또는 반환)

수익 대신 수익을 사용하거나 둘 중 하나를 사용해야합니까?

class Sum 

def initialize 
    @sum = Array.new 
end 

def each 
@sum.each do |item| 
    yield item 
end 

end 
+0

저는 이것이 숙제라고 생각합니까? – Phrogz

+0

'end'가 누락 된 것 외에는 작성한 코드가 작동합니다. 너의 문제는 무엇인가? – Phrogz

답변

1

반복기처럼 작동하는 클래스를 작성하려고합니까? 그게 자신의 each 양식을 제공합니까? 그렇다면,이 루비 클래스 그렇게하는 패턴이다 어레이 (@data) 위에

class MyIterator 
    include Enumerable 

    def initialize data=[] 
    @data = data 
    end 

    def each 
    @data.each do |item| 
     yield item 
    end 
    end 
end 

m = MyIterator.new [1,2,3,4] 

m.each do |item| 
    puts "item=#{item}" 
end 

puts m.map(&:next) 

for_each 반복 방법은 상기 블록 각각의 값을 산출한다. 1 월 드보르작 @로

Enumerable을 포함하고 each는 개체에 직접 map를 호출 할 수있는 등의 추가 혜택을 제공하는 방법을 명명 지적했다.

+2

왜 'each'라는 이름을 지어야합니까? 그리고 Enumerable 포함합니까? –

+0

좋은 점, 예제를 업데이트하겠습니다. –

3

Enumerable을 포함하고 each을 구현하면 무료로 많은 기능을 사용할 수 있습니다.

class Sum 
    def initialize 
    @sum = [] 
    end 

    def each &block 
    @sum.each &block 
    end 
end 

yield 것이다 컬렉션의 각 항목 또는 당신은 그냥이 숙제라고 가정하고, 사용 정상적인 Array

0

처럼 당신에게 열거를 반환하는 블록을 제공하지 않는 경우 each 기존 방법은 허용되지 않습니다 :

class Sum 
    def initialize 
    @values = [] 
    end 
    def homework_each 
    0.upto(@values.length-1){ |i| yield @values[i] } 
    end 
end 

그러나 기록 된 작품과 같은 코드를, 당신이 end 누락하고, 또한 당신이 승 배열을 채울 수있는 방법을 놓치고 있다는 사실을 모듈로 i 값.