たけ(tk)です

* StringScanner#rest? がオンラインリファレンスに書いてないようです。
    >ドキュメント担当の方
(http://www.ruby-lang.org/ja/man/index.cgi?cmd=view;name=strscan;em=strscan)

----

[ruby-list:42699] Re: StringScanner  と case  の相性 & メソッド上書きの方法 にて
"Hiroyuki Iwatsuki" <don / na.rim.or.jp> さん曰く:

> 岩月と申します。
> 
> StringScannerオブジェクトをcase文で使うなら、
> case文の式を省略してみてはいかがでしょうか。

http://www.ruby-lang.org/ja/man/index.cgi?cmd=view;name=%C0%A9%B8%E6%B9%BD%C2%A4#case
case の「式」を省略した場合、when の条件式が偽でない最初の 式を評価します。

知らなかった・・。うまくいきますね。

require 'strscan'

s = StringScanner.new('This is an example string.')

while s.rest?
  case
  when s.scan(/\w+/) ; p [:word, s.matched]
  when s.scan(/\s+/) ; p [:space, s.matched]
  else               ; p [:mismatched, s.rest] ; break
  end
end

> あと、(4)のモジュールでメソッドを上書きする方法は
> 今でも使えますよ。superも使えます。

ふむ、これも・・。includeとextendとの違いが気づかなかった。

extendではsuperが使えるが、includeではsuperが使えない、というのが残念。

Take_tk = KUMAGAI Hidetake
たけ(tk)=熊谷秀武