From: Kikutani Makoto Date: 1997-09-18T19:13:37+09:00 Subject: [ruby-list:4419] Re: nif2news.rb きくたにです。 Thu, Sep 18, 1997 at 10:55:35AM +0900 において MAEDA Shugo さん曰く: > 最後の実行部でelsifが続くのをもう少しスマートにしたいですね。 > 最近、文字列処理でHashを使う例がruby-listで出ていたのですが、 (snip) > みたいにするというのはどうでしょう? > ちょっと遅くなるかもしれませんが、NIFTYの仕様変更のたびに > プログラム全体の制御構造を書き換えなくてすむというメリット ありがとうございます。これは目ウロコでした。 ただ、元のプログラムだとマッチしたパターンを使って処理してるので、 下の例で、手続きの中で $1 とかを参照できればいいのですが、 さすがに無理ですね。もう一度マッチさせるのも美しくないし。 あと、文法なんですが、actions.add で、手続きが配列にpushされる しくみがわからないです。 #!/usr/bin/ruby actions = [] def actions.add(pattern, action = Proc.new) push [pattern, action] end def actions.call(str) each do |assoc| if str =~ assoc[0] assoc[1].call break end end end actions.add(/^(\S+)\s+(\S+)\s+(\S+)$/) do printf "\$1 = %s, \$2 = %s, \$3 = %s\n", $1, $2, $3 end actions.add(/^(\S+)\s+(\S+)$/) do printf "\$1 = %s, \$2 = %s\n", $1, $2 end while $_ = gets actions.call($_) end -- 人生を背負い投げ 菊谷 誠(Kikutani Makoto) kikutani@eis.or.jp kikutani@jdc.ericsson.se hgf03701@niftyserve.or.jp http://www.eis.or.jp/muse/kikutani/