我想定义一组方法,可以使用Mixin将其添加到一个类(示例中的C)中。这些方法可以由任何继承自另一个类(本例中为A)的类定义,并且应该能够在接收者实例(C实例)中调用方法。使用一组方法创建一个Mixin,而不是调用另一个类的方法
我有这样的代码片段:使用块作品
M = Module.new
class A
class << self
def init(method)
if block_given?
M.send(:define_method, method) do
instance_exec &Proc.new
end
else
block = self.method(method).to_proc
M.send(:define_method, method) do
yield block.call
end
end
end
end
end
class B < A
init(:foo) do
"foo+".concat(c_method)
end
def self.bar
"bar+".concat(c_method)
end
init(:bar)
end
C = Class.new do
def c_method
"c_method"
end
end
c = C.new
c.extend(M)
puts c.foo
puts c.bar
添加方法,但最后一行失败:(
foo+c_method
test.rb:28:in `bar': undefined local variable or method `c_method' for B:Class (NameError)
from test.rb:15:in `call'
from test.rb:15:in `block in init'
from test.rb:46:in `<main>'
什么我做错了还是这是没有意义的?
感谢
胡安
是的,这是正确的。我试图解除B的方法并绑定到C,它不起作用。我试图回答我的问题,但我没有特权,我需要等待几个小时:) [此链接解释了这个问题](http://ruby-metaprogramming.rubylearning.com/yugui_blog_translation_1.html) – juandebravo