私はWebを調べて、自分が何であるかを試すための多くの情報を見つけましたが、Ruby / Railsミックスインに追加したい砂糖の1つは、パターンを探す関数を作成しています。という基本関数を作成したい
is_a_ *
ここで、*は何でもかまいません。*が何であれ、関数内で使用してそれに応じて動作できるように、取得可能である必要があります。method_missingを使用する必要がありますか?
私はWebを調べて、自分が何であるかを試すための多くの情報を見つけましたが、Ruby / Railsミックスインに追加したい砂糖の1つは、パターンを探す関数を作成しています。という基本関数を作成したい
is_a_ *
ここで、*は何でもかまいません。*が何であれ、関数内で使用してそれに応じて動作できるように、取得可能である必要があります。method_missingを使用する必要がありますか?
これは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