logo       

[ruby-list:42460] Re: 多量の正規表現との効率的なマッチのアイデアを、、: msg#00114

lang.ruby.japanese

Subject: [ruby-list:42460] Re: 多量の正規表現との効率的なマッチのアイデアを、、

From: しん <dezawa-eY1vtc/6GtbR7s880joybQ@xxxxxxxxxxxxxxxx>
Subject: [ruby-list:42459] Re: 多量の正規表現との効率的なマッチのアイデアを、、
Date: Fri, 23 Jun 2006 12:03:15 +0900

> なので、これは m0 というカテゴリになおし、一致しなかった3つを 52のままにします。

??よくわからないのでプログラムでお願いします。

> > Rubyらしさを求めるならば、ぜひブロックを使いましょう。
> > each、map、find_allあたりから慣れてみましょう。
> > 各々の要素について処理を行ない新たな配列を返すmapはとても便利です!!
>
> はい、そうしたいのですがまだなかなか使いかたが把握できなくて。

高階関数や関数ポインタをイメージするといいかもしれません。
ブロックの中を(無名)関数とみてそれをメソッドに渡しているイメージ。

ブロックを使うことでwhileなどを明示的に書かずともループして処理してくれます。
しかもmap(写像)、find_all(一致検査)など説明的なコードを書けます。
ブロックのおかげで「配列各々について繰り返して代入して…」ってレベルから、
「○○という写像を適用する」、「××に一致したものを取り出す」というふうに
よりわかりやすい考え方になります。
もちろんブロックはループ処理以外にも多種多様な使い方があります。

Schemeなど関数型言語の高階関数に触れてみるとブロックの本当の威力がわか
るでしょう。繰り返しではありませんが、EmacsLispのsave-excursionやwith系
マクロもブロックに似ています。


> > input.split(/\n/).map{|line| cat,data = line.split; [cat,
> > Regexp.new(Regexp.quote(data))]}
> > # => [["m0", /windowsupdate/], ["m0", /trendmicro/], ["m1",
> > /w3b\.mydomain/], ["m2", /mydomain/]]
>
> 成る程。
> ブロック内の最後の式に置き換わるわけですね。
> String が 配列に化けるのかぁ。。

いえ、配列→配列の変換です。
input.split(/\n/)で配列になりますから。

--
rubikitch
http://www.rubyist.net/~rubikitch/




<Prev in Thread] Current Thread [Next in Thread>
Google Custom Search

News | FAQ | advertise