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.