0
我一直在寻找网络,并发现了大量关于尝试我的信息,但是我想添加到我的Ruby/Rails mixin中的一点糖正在创建一个函数那寻找一个模式。我想创建一个名为Extend ActiveRecord method_missing
is_a_ *
其中*可以是任何基本功能。无论那个*是什么,都需要被检索,所以我可以在函数内部使用它并采取相应的行动。我必须使用method_missing吗?
我一直在寻找网络,并发现了大量关于尝试我的信息,但是我想添加到我的Ruby/Rails mixin中的一点糖正在创建一个函数那寻找一个模式。我想创建一个名为Extend ActiveRecord method_missing
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"
附:你不严格需要重写respond_to?
,我只是包括它的完整性:
a.respond_to?("is_a_foo")
#=> true
a.respond_to?("is_a_bar")
#=> true
a.respond_to?("is__a_foo")
#=> false
你能解释一下,如果对象是*(任何)或不is_a_ *方法获取? –