例如
class Foo
def bar
end
end
在该代码中,bar只能在该类的任何实例中使用。
是否可以将方法的执行上下文更改为Eigenclass
而无需更改方法本身的定义方式,以便该方法现在可以作为单例使用而无需调用self.new
?
我希望能够通过Foo
可以继承的类添加到代码中的任何代码执行此操作。
目前我正在做的事情相当于:
class Test
def method_added method
self.define_singleton_method method do
self.new.send method
end
end
end
并且由于我正在通过调用new
来更改执行上下文,因此我无需工作。
答案 0 :(得分:0)
我刚刚研究了如何做> _<。
以下是代码:
class Test
def method_added method
m = self.new.method(method) #get method object
self.define_singleton_method(method) do #create method with same name within the singleton class
m.call #call the block which will now run the code of the added method within the context of the Eigenclass/Singleton
end
end
end
它的作用是它从一个实例中获取一个方法对象,然后将该方法作为一个块在该类的上下文中调用。
所以第一个代码示例变为:
class Foo < Test
def bar
end
end
现在可以访问方法bar
Foo.bar
而不是Foo.new.bar
,这意味着没有实例创建;除了它在方法中添加的时间,但这很好,因为它是获得方法对象的唯一方法,据我所知。
这就是为什么最好只在继承类时(在def self.inherited
内)创建一个实例,将它存储在类中,然后只访问它而不是调用{{1 }}
答案 1 :(得分:0)
您可以这样做:
class Test
def self.method_added method
module_function method
end
end
class A < Test
def foo
:hello
end
end
A.foo #=> :hello