In message <199903090457.NAA00259.keiju / bc.mbn.or.jp>
keiju / Rational.Com (=?ISO-2022-JP?B?GyRCQFBETTc9PHkbKEI=?= ) writes:

> そうではないと思いますよ.
> 
> 1. 例外であれば, そこで入力エラーが発生しているのが分かるので, いちい
>    ち正しいシンボルかどうか調べる必要がない.  
> 
> 2. デバッグ中には, その例外の発生した場所が特定できるわけですから. そ
>    のように実装する必要はない.
> 
> 逆に, デフォルトで空読みするメリットが見えてこないんですが?

まあそうですねぇ.....空読みする事に根拠があったわけでも無し,素直に例
外をあげるようにしましょうか.

    class ScanError < Exception; end

として,

    raise ScanError, "string \"#{@__line__}\" doesn't match with any
                      pattern in mode \"#{__@mode__}\"."

ぐらい言っとくとデバッグには便利かな.行番号も数えてあるといいかもしれ
ないけど,それはめんどう臭そうだ.

# メッセージ変かも.


> >いや,入力を String で与えた場合と IO で与えた場合とでこのマッチ規則が
> >変わるわけではないし,という話です.唯一,改行にまたがったマッチを明示
> >した場合のみ動作が異なりますが,もともとそれはできないつもりだし.
> >
> ># 上の例については伝統的な動作だと思いますけど.んでもって,これが
> ># chomp が必要であるという根拠になる理由も理解できない....
> 
> そうですね...
> 
>   ([^\n]*)$
> 
> こういうルールがあったとして, これにマッチしたら次の行にいくと信じるの
> ま間違いなんでしょうね? いまだと, マッチした後にも "\n"が残りますよね?

....

    >  ruby -r irb/xmp.rb
    xmp <<EOX
    str = "foo\nbar\nbaz"
    str =~  /.+$/; str = $'
    p $&
    str =~ /.+$/; str = $'
    p $&
    EOX
    str = "foo
    bar
    baz"
        ==>"foo\nbar\nbaz"
    str =~  /.+$/; str = $'
        ==>"\nbar\nbaz"
    p $&
    "foo"
        ==>nil
    str =~ /.+$/; str = $'
        ==>"\nbaz"
    p $&
    "bar"
        ==>nil
    
`.' によるマッチは `\n' を乗り越えて進んでいくような.

`\n' を数えて行を数えるっていうのはけっこう楽だし.だいいち中間の `\n' 
は chomp では消えないし.....ということで,やっぱり chomp の必要性が見
えてきません.


>   ([^\n]*)$
> 
> こういうルールがあったとして, これにマッチしたら次の行にいくと信じるの
> ま間違いなんでしょうね? いまだと, マッチした後にも "\n"が残りますよね?

スキャナに文字列を一行づつ与える場合には自然次の行にいくし,複数行から
なる文字列を与える場合 chomp しても無意味なのは前述の通り....

-- 
柳川和久 @ 東大阪市 . 大阪府                                  March 9, 1999
Every body's business is nobody's business.