我正在学习红宝石,遇到了一些我不理解的问题。我知道ruby中的模块用于通过: :(或。)命名和与include指令混合使用。当我将一些方法分组到模块中而不将它们放在类中时,就会出现问题。这是一个例子:
module Familiar
#this will not work
def ask_age
return "How old are you?"
end
#this will work
def Familiar::greeting
return "What's up?"
end
end
# this call returns **NoMethodError**
puts(Familiar::ask_age())
# this call works fine
puts(Familiar::greeting())
为什么我需要包括名称空间来定义方法,我已经在名称空间内熟悉,为什么我必须重复自我并将Familiar :: greeting,您可以通过以下链接在线测试示例:http:// codepad .org / VUgCVPXN
有关Module的Ruby文档在其介绍文本中对此进行了回答。
这种形式:
module Familiar
def ask_age
return "How old are you?"
end
end
定义#ask_age
为Familiar上的实例方法。但是,您无法实例化模块,因此无法直接使用它们的实例方法。您将它们混合到其他类别中。模块中的实例方法或多或少直接不可访问。
相比之下,这种形式:
module Familiar
def self.ask_age
return "What's up?"
end
end
定义::ask_age
为模块功能。它是可直接调用的,并且在将模块混入另一个类时不会出现在包含的类上。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句