injectの練習問題

与えられた単語のリストから、もっとも多く母音が含まれる単語を返す。というのは、injectを使う例として恣意的に考え付いた練習問題だけど。ついでにString#scanも使ってみたかった。

class String
  def number_of_vowels
    scan(/[aiueo]/).size
  end

  alias size number_of_vowels 

end

words = %w[apple banaaaaaaana orange grape]
puts words.inject{|mostv,w|
  w.size > mostv.size ? w : mostv
}

# banaaaaaaana

なるほど、injectは初期値を省略するとselfの最初の要素が代入されるので、こんなことができる。