是否可以替换
@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中?
答案 0 :(得分:2)
你可以这样做:
def with(context, &block)
yield context
end
with MyModule do |m|
@m1 = m.method1
@m2 = m.method2
...
end
我不完全确定这会给你带来什么好处 - 你能否更具体地说明你打算如何使用它?
答案 1 :(得分:1)
不,这是不可能的。没有显式接收器的方法调用具有self
的隐式接收器,因此为了使method1
调用MyModule.method1
,需要将self
更改为MyModule
}。毕竟,这很容易,这就是instance_eval
和instance_exec
的用途。
但是,实例变量也属于self
,这就是为什么它们被称为实例变量,毕竟。因此,如果您将self
更改为MyModule
,那么@m1
,@m2
等也将属于MyModule
,而不再属于他们所属的任何对象你的代码示例。
换句话说,您需要self
进行更改,但您还需要self
不要更改。这是一个矛盾,因此,你想要的是不可能的。