From: matz@... (Yukihiro Matsumoto) Date: 1997-09-18T19:18:34+09:00 Subject: [ruby-list:4420] Re: nif2news.rb まつもと ゆきひろです In message "[ruby-list:4419] Re: nif2news.rb" on 97/09/18, Kikutani Makoto writes: |きくたにです。 |ただ、元のプログラムだとマッチしたパターンを使って処理してるので、 |下の例で、手続きの中で $1 とかを参照できればいいのですが、 |さすがに無理ですね。もう一度マッチさせるのも美しくないし。 その時点での $~ の値を取り出して,引数として渡せば,再代入す る事によってコンテキストを復旧できます. def foo(context) $~ = context printf "%s - %s\n", $&, $1 end "abc" =~ /a(..)/ foo($~) 美しいかどうかは趣味が別れるかも知れませんが. |あと、文法なんですが、actions.add で、手続きが配列にpushされる |しくみがわからないです。 | |#!/usr/bin/ruby |actions = [] | |def actions.add(pattern, action = Proc.new) | push [pattern, action] |end actions.addを(第2引数なしで)イテレータとして呼び出すと, Proc.newがイテレータブロックをオブジェクト化してactionに代入 してくれます.後はその手続きオブジェクトを配列にpushするだけ です. まつもと ゆきひろ /:|)