是否可以替代
@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
改变。这是一个矛盾,因此,你想要的东西是不可能的。