是否有可能取代調用模塊類方法,而模塊名在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中
?
是否有可能取代調用模塊類方法,而模塊名在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中
?
不,這是不可能的。沒有明確的接收方的方法調用有一個隱含的接收方self
,所以爲了使method1
致電MyModule.method1
,需要將self
改爲MyModule
。畢竟,這很簡單,那就是instance_eval
和instance_exec
。
但是,實例變量也屬於self
,這就是爲什麼它們被稱爲實例變量畢竟。因此,如果您將self
更改爲MyModule
,那麼@m1
,@m2
等也將屬於MyModule
,並且不再代表您的代碼示例中的任何對象。
換句話說,你需要self
來改變,但你也需要self
不能改變。這是一個矛盾,錯,你想要的是不可能的。
你可以做這樣的事情:
def with(context, &block)
yield context
end
with MyModule do |m|
@m1 = m.method1
@m2 = m.method2
...
end
我不能完全確定什麼好處這給你 - 你能具體談談你打算如何使用呢?