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'
我是 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'