enum

http://mono.kmc.gr.jp/~yhara/d/?date=20070612#p04
あ〜わかる。

module Enumerable
  def each2
    a = self.to_a
    a.each_index do |i|
      yield ((i-1<0)?(nil):(a[i-1]), a[i], a[i+1])
    end
  end
end

(1..10).each2{|prev,i,succ| print "#{prev}, #{i}, #{succ}\n"}

とかでいいのかな?
zip使うのがカッコいいのかぁ…


あと、

module Enumerable
  def each2
    a = self.to_a
    a.each_index do |i|
      i2 = (i-1 < 0)?(0):(i-1)
      yield (a[0..i2].reverse, a[i], a[i+1..last])
    end
  end
end

(1..10).each2{|prev,i,succ| print "#{prev}, #{i}, #{succ}\n"}
(1..10).each2{|prev,i,succ| print "#{prev[0]}, #{i}, #{succ[0]}\n"} # 隣
(1..10).each2{|prev,i,succ| print "#{prev[1]}, #{i}, #{succ[1]}\n"} # 隣の隣

とかすれば両隣が必要なとき以外に、両隣のさらに隣が必要なときなどにも対応できるんじゃないかと

俺名前の付け方下手だなぁ…