Ruby如何从同一命名空间中的类调用模块方法

时间:2018-09-10 17:54:40

标签: ruby mixins

我是Ruby的新手,正在尝试了解ruby中的模块方法。

trace_code

如果我调用模块或类,则会得到以下异常。 (M1:模块的未定义方法“ add_comment”)

1 个答案:

答案 0 :(得分:1)

通常,您可以使用惰性初始化程序来解决此问题:

def comments 
  @comments ||= [ ]
end

除非已定义,否则将用空数组填充@comments的地方。

这使add_comment方法变得多余,因为您可以这样做:

comments << comment

没有任何中介。

现在请注意,comments方法被定义为 mixin方法,而不是独立方法。这意味着它不存在,直到该模块上的某些其他模块或类调用include

使其独立:

def self.comments 
  @comments ||= [ ]
end

现在您可以执行以下操作:

M1.comments << 'New comment'