0

私はWebを調べて、自分が何であるかを試すための多くの情報を見つけましたが、Ruby / Railsミックスインに追加したい砂糖の1つは、パターンを探す関数を作成しています。という基本関数を作成したい

is_a_ *

ここで、*は何でもかまいません。*が何であれ、関数内で使用してそれに応じて動作できるように、取得可能である必要があります。method_missingを使用する必要がありますか?

4

1 に答える 1

4

これはmethod_missing、たとえば次のようなものが機能するように作成されたものです。

module MyMixin

  def respond_to?(method, priv=false)
    (method.to_s =~ /^is_a_(\w+)$/) || super
  end

  def method_missing(sym, *args)
    if sym.to_s =~ /^is_a_(\w+)$/
      pattern = $1
      # then just do something with pattern here, e.g.:
      puts pattern
    else
      super
    end
  end

end

次にMyMixin、クラスに含めます。例:

class A
  include MyMixin
end

a = A.new
a.is_a_foo
#=> "foo"

ps厳密にオーバーライドする必要はありませんがrespond_to?、完全を期すために含めました。

a.respond_to?("is_a_foo")
#=> true
a.respond_to?("is_a_bar")
#=> true
a.respond_to?("is__a_foo")
#=> false
于 2012-12-05T03:00:34.460 に答える