ライブラリのインターフェイスが変なときにGeneratorを使ってましにできることがある.
MeCabのRubyバインディングのインターフェイスがださくて,使いにくかった.
分かち書きして,名詞だけ表示するようなとき,普通に書くとこうなる.
c = MeCab::Tagger.new("-O wakati") node = c.parseToNode(text) while node do puts node.surface if node.feature =~ /^名詞/ node = node.next end
whileとか,node = node.nextとかが,Rubyっぽくない.
Generatorに入れて1個ずつ返すようにすると,Enumlatorを使えるようになって,だいぶましになる.
c = MeCab::Tagger.new("-O wakati") node = c.parseToNode(text) Generator.new{|g| while node do g.yield node node = node.next end }.select{|node| node.feature =~ /^名詞/ }.each{|node| puts node.surface }
node = node.nextとか書かされるライブラリはMeCab以外に知らないけど,他にもそういうのがあれば同じように使えそう.