2013-05-28 112 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 

我不能完全確定什麼好處這給你 - 你能具體談談你打算如何使用呢?