在Ruby中包含模块的克隆时的TypeError

时间:2018-03-13 13:55:20

标签: ruby module include

我正在测试一个有状态的模块。目前我在每个测试用例后恢复该状态。相反,我想使用模块的一次性克隆。

考虑以下简单示例:

module MyModule; end
clone = MyModule.clone
clone.class # => Module
clone.class == MyModule.class # => true
class MyClass
  include clone # => TypeError: wrong argument type Class (expected Module)
end

为什么这不起作用?有没有办法实现我的目标?

1 个答案:

答案 0 :(得分:2)

这是因为clone作为局部变量的范围不会进入MyClass的类体内。在那里,clone被解释为应用于self的方法。因此,您的最后三行等同于:

class MyClass
  include MyClass.clone
end

由于MyClass是一个类,因此它的克隆MyClass.clone也是如此。你不能包括一个班级。