From: Shin-ichiro HARA Date: 1997-11-15T14:41:28+09:00 Subject: [ruby-dev:855] Re: request SCAN 原です。 > まつもと ゆきひろです > では,その方向で検討しましょう.しばらくは待ちますから文句の > ある人は名乗り出て下さい(って,ruby-listでやった方がよいか). やっぱり多少の非互換性がアリだとすれば、こういうB案も あるということで、はっきりさせるためにあげておきます。 A案(非イテレータについてのみ非互換) 1) 非イテレータとしては [$1, $2,..] の配列を返す "abcd".scan(/(.)(.)/) ==> [["a", "b"], ["c", "d"]] カッコが無い正規表現については $& の配列を返す "abcd".scan(/../) ==> ["ab", "cd"] 2) イテレータとしては配列を繰り返し渡す "abcd".scan(/(.)(.)/){|x| p x} ==> ["a", "b"] ["c", "d"] カッコが無い正規表現については $& を繰り返し渡す "abcd".scan(/../){|x| p x} ==> "ab" "cd" B案(イテレータについてのみ非互換、gscan を導入) 1) 非イテレータとしては [$1, $2,..] を返す "abcd".scan(/(.)(.)/) ==> ["a", "b"] カッコが無い正規表現については $& を返す "abcd".scan(/../) ==> "ab" 2) イテレータとしては配列をパラメータとして渡す "abcd".scan(/(.)(.)/){|x| p x} ==> ["a", "b"] カッコが無い正規表現については $& を渡す "abcd".scan(/../){|x| p x} ==> "ab" 1g) 非イテレータとしては [$1, $2,..] の配列を返す "abcd".gscan(/(.)(.)/) ==> [["a", "b"], ["c", "d"]] カッコが無い正規表現については $& の配列を返す "abcd".gscan(/../) ==> ["ab", "cd"] 2g) イテレータとしては配列をパラメータとして繰り返し渡す "abcd".gscan(/(.)(.)/){|x| p x} ==> ["a", "b"] ==> ["c", "d"] カッコが無い正規表現については $& を繰り返し渡す "abcd".gscan(/../){|x| p x} ==> "ab" "cd" scan に g(lobal) という意味合いがあるので、gscan というのは 気持ち悪いかも。名前を考え直すという手もありますね。 scan_first scan scan scan_all scan scan(,TRUE) collect collect_all(gcollect) match match_all (gmatch) pick pick_all (gpick) search search_all (gsearch) gather gather_all (ggather) exam exam_all (gexam)