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

Ruby How to call module methods from class in the same namespace

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

module M1
    def comments 
      if @comments
        @comments
      else
        @comments = []
      end
    end

    def add_comment(comment)
       comments << comment
    end

    class Audio

         <<How do i call add_comment or comments >>
         def someMethod
            add_comment "calling module method from class which is in  same namespace or module"
         end

    end

end

如果我调用 Module 或 Class,会出现以下异常。 (M1:Module 的未定义方法 `add_comment')

通常你可以用 惰性初始化器来解决这个问题:

def comments 
  @comments ||= [ ]
end

除非已经定义,否则用空数组填充 @comments

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

comments << comment

没有任何中介。

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

使其独立:

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

现在你可以这样做了:

M1.comments << 'New comment'