1.9.0

雑用にスクリプトを書いてて,こんな処理が欲しくなった.

idx = %w[max abs sin cos].index{|x| x=~/\Aa/ }

リファレンスにはあるのに,どうして動かないんだ!と思ったら1.9 featureか.
1.9に乗り換えようか.

1.8系にバックポートしてくれないかな.ていうか自分で作ればよくない?
すでに誰かが作っているような気がしなくもないけど.

class Array
  def index_1_9( val=nil,&block)
    return send(:index_1_8, val) unless block_given?
    each_with_index {|x,i| return i if block.call(x)}
    nil
  end

  alias_method :index_1_8, :index
  alias_method :index, :index_1_9

end

a = %w[max abs sin cos]
p a.index("sin")           #=> 2
p a.index {|x| x=~/\Aa/ }  #=> 1

すばらしい拡張性だな.

rindexは?