Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/64.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 在Ruby中调用没有模块名的模块类方法_Ruby On Rails_Ruby - Fatal编程技术网

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
不进行更改。这是一个矛盾,因此,你想要的是不可能的