2013-05-28 84 views
1

是否有可能取代调用模块类方法,而模块名在Ruby中

@m1 = MyModule.method1 
@m2 = MyModule.method2 
@m3 = MyModule.method3 
@m4 = MyModule.method4 

像这样的东西

with MyModule do 

    @m1 = method1 
    @m2 = method2 
    @m3 = method3 
    @m4 = method4 

end 
在Ruby中

回答

1

不,这是不可能的。没有明确的接收方的方法调用有一个隐含的接收方self,所以为了使method1致电MyModule.method1,需要将self改为MyModule。毕竟,这很简单,那就是instance_evalinstance_exec

但是,实例变量也属于self,这就是为什么它们被称为实例变量毕竟。因此,如果您将self更改为MyModule,那么@m1,@m2等也将属于MyModule,并且不再代表您的代码示例中的任何对象。

换句话说,你需要self来改变,但你也需要self不能改变。这是一个矛盾,错,你想要的是不可能的。

2

你可以做这样的事情:

def with(context, &block) 
    yield context 
end 

with MyModule do |m| 
    @m1 = m.method1 
    @m2 = m.method2 
    ... 
end 

我不能完全确定什么好处这给你 - 你能具体谈谈你打算如何使用呢?