我一直在寻找网络并且已经找到了大量关于尝试我的信息,但是我想添加到我的Ruby / Rails mixin中的一点糖,正在创建一个寻找的功能一种模式。我想创建一个名为
的基函数is_a _ *
其中*可以是任何东西。无论是什么*都需要可以检索,所以我可以在函数内部使用它并相应地采取行动。我必须使用method_missing吗?
答案 0 :(得分: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"
P.S。你并不一定要覆盖respond_to?
,我只是为了完整性而加入它:
a.respond_to?("is_a_foo")
#=> true
a.respond_to?("is_a_bar")
#=> true
a.respond_to?("is__a_foo")
#=> false