[#837] request SCAN — Shin-ichiro HARA <sinara@...>

原です。

25 messages 1997/11/14
[#838] Re: request SCAN — matz@... (Yukihiro Matsumoto) 1997/11/14

まつもと ゆきひろです

[#839] Re: request SCAN — Shin-ichiro HARA <sinara@...> 1997/11/14

原です。

[#840] Re: request SCAN — Shin-ichiro HARA <sinara@...> 1997/11/14

原です。

[#841] Re: request SCAN — Shin-ichiro HARA <sinara@...> 1997/11/14

原です。

[#843] Re: request SCAN — matz@... (Yukihiro Matsumoto) 1997/11/14

まつもと ゆきひろです

[#844] Re: request SCAN — Shin-ichiro HARA <sinara@...> 1997/11/14

原です。

[#845] Re: request SCAN — matz@... (Yukihiro Matsumoto) 1997/11/14

まつもと ゆきひろです

[#864] [Req] Proc.new — Shin-ichiro HARA <sinara@...>

原です。

53 messages 1997/11/19
[#865] Re: [Req] Proc.new — matz@... (Yukihiro Matsumoto) 1997/11/19

まつもと ゆきひろです

[#866] Re: [Req] Proc.new — Shin-ichiro HARA <sinara@...> 1997/11/19

原です。

[#867] Re: [Req] Proc.new — matz@... (Yukihiro Matsumoto) 1997/11/19

まつもと ゆきひろです

[#875] Re: [Req] Proc.new — Shin-ichiro HARA <sinara@...> 1997/11/20

原です。

[#877] Re: [Req] Proc.new — shugo@... (Shugo Maeda) 1997/11/20

前田です。

[#879] Re: [Req] Proc.new — Shin-ichiro HARA <sinara@...> 1997/11/20

原です。

[#886] Re: [Req] Proc.new — shugo@... (Shugo Maeda) 1997/11/20

前田です。

[#890] Re: [Req] Proc.new — keiju@... (石塚圭樹 ) 1997/11/20

けいじゅ@日本ラショナルソフトウェアです.

[ruby-dev:855] Re: request SCAN

From: Shin-ichiro HARA <sinara@...>
Date: 1997-11-15 05:41:28 UTC
List: ruby-dev #855
原です。

> まつもと ゆきひろです

> では,その方向で検討しましょう.しばらくは待ちますから文句の
> ある人は名乗り出て下さい(って,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)

In This Thread