是否可以替代
@m1 = MyModule.method1
@m2 = MyModule.method2
@m3 = MyModule.method3
@m4 = MyModule.method4
像这样的东西
with MyModule do
@m1 = method1
@m2 = method2
@m3 = method3
@m4 = method4
end
在红宝石?
是否可以替代
@m1 = MyModule.method1
@m2 = MyModule.method2
@m3 = MyModule.method3
@m4 = MyModule.method4
像这样的东西
with MyModule do
@m1 = method1
@m2 = method2
@m3 = method3
@m4 = method4
end
在红宝石?
你可以这样做:
def with(context, &block)
yield context
end
with MyModule do |m|
@m1 = m.method1
@m2 = m.method2
...
end
我不完全确定这会给您带来什么好处-您能否更具体地说明您打算如何使用它?
不,这是不可能的。没有显式接收器的方法调用有一个隐式接收器self,因此为了method1调用MyModule.method1,self需要更改为MyModule。这很容易,毕竟,这就是目的instance_eval和instance_exec目的。
但是,实例变量也属于,毕竟self这就是它们被称为实例变量的原因。因此,如果您更改self为MyModule, then@m1等@m2也将属于MyModule并且不再属于它们在您的代码示例中属于的任何对象。
换句话说,你需要self改变,但你也不需要self改变。这是一个矛盾,因此,你想要的东西是不可能的。