자세한건 http://m.dcinside.com/view.php?id=programming&no=754558&page=1&serVal=%ED%82%B9%EA%B0%93vim&s_type=name&ser_pos=

가보면 됨..


[wl : 22 line 엔터 빼고 딱 붙임]

triangular_numbers = Enumerator.new do |yielder|
  number =0
  count = 1
  loop do
    number += count
    count  += 1
    yielder.yield number
  end
end
class Enumerator
  def infinite_select(&block)
    Enumerator.new do |yielder|
      self.each do |value|
       yielder.yield(value) if block.call(value)
      end
    end
  end
end
p triangular_numbers
  .infinite_select { |val| val % 10 == 0 }
  .infinite_select { |val| val.to_s =~ /3/ }
  .first(5) #[300, 630, 1830, 3160, 3240]


result

#[300, 630, 1830, 3160, 3240]

보면 알겠다만 end 브라켓이 존내 길어.. ㅎㅎ

이럴꺼면 루비 왜하냐 이거지..



그래서 하나 알아낸게

.lazy 라는 메소드임.

즉 뭐하나 코딩하는데 좆도 귀찮은 새끼들을 위해서 마련된 메소드 라는거임..

결과적으로

#[300, 630, 1830, 3160, 3240]  이것만 나오면 돼.

그리고 문법이 상당히 미묘하게 다르면서 줄수와 글자수가 확줄어듬..


[wl : 14 line 역시 엔터빼고 딱 붙임..]

def Integer.all
    Enumerator.new do |yielder,n: 0 ,c: 1|
      loop{
        n += c
        c += 1
    yielder.yield(n)
      }
    end.lazy
end
p Integer
  .all
  .select { |val| (val % 10).zero? }
  .select{|val| val.to_s =~ /3/ }
  .first(5)

result

#[300, 630, 1830, 3160, 3240]


이제 6 개월 땔감 아뱅 자바충 따위랑은 할 얘기가 없다..