是否有可能取代调用模块类方法,而模块名在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
我不能完全确定什么好处这给你 - 你能具体谈谈你打算如何使用呢?