Ruby on rails 在Ruby中调用没有模块名的模块类方法
有没有可能替换Ruby on rails 在Ruby中调用没有模块名的模块类方法,ruby-on-rails,ruby,Ruby On Rails,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中?您可以执行以下操作: def with(context, &block) yiel
@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中?您可以执行以下操作:
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\u eval
和instance\u exec
的用途
然而,实例变量也属于self
,这就是它们被称为实例变量的原因。因此,如果将self
更改为MyModule
,则@m1
、@m2
等也将属于MyModule
,而不再属于代码示例中它们所属的任何对象
换句话说,您需要self
进行更改,但也需要self
不进行更改。这是一个矛盾,因此,你想要的是不可能的