3

ハッシュに格納された置換ルールの「テーブル」があります。各キーはルールであり、各値は一致したテキストを取得して引数として送信するメソッドです。各メソッドは文字列を返します。すべての試合を送る方法がわからないことを除いて。sendこれを達成するために、呼び出しにコメントを入力するにはどうすればよいですか?

Sub_Rules = {
   /N\[(\d+)\]/i          => :do_something,
   /N\[(\d+)\]\[(\d+)\]/i => :do_something_else
}

def do_something(*args)
  "something based on the args"
end

def do_something_else(*args)
  "something else based on the args"
end

text = "N[2]"
Sub_Rules.each {|rule, method|
  p text.gsub(rule) {send(method, #the matches?)}
}

ハードコーディングしたい場合は、次のようにします。

text.gsub(/N\[(\d+)\]/i) { do_something($1) }
4

1 に答える 1

4

動作する場合text.gsub(/N\[(\d+)\]/i) { do_something($1) }、これも次のようになります。

Sub_Rules.each do |rule, method|
  p text.gsub(rule) { send(method, $1) }
end

しかし、text.gsub(/N\[(\d+)\]/i) { do_something($1) }「すべての一致を送信」し​​ないため、実際には機能しないのではないかと思います。代わりにあなたはおそらくしたい

Sub_Rules.each do |rule, method|
  p text.gsub(rule) { send(method, $~.captures) }
end

これは、正規表現の各グループからのキャプチャの配列を送信します。

于 2012-11-04T22:30:21.203 に答える