Ama*_*nut 14 ruby methods module ruby-on-rails
我正在学习红宝石,我想出了一些我不理解的东西.我知道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())
Run Code Online (Sandbox Code Playgroud)
为什么我需要包含命名空间来定义方法,我已经在命名空间内熟悉为什么我必须重复我的自我并把Familiar :: greeting 你可以在这个链接后在线测试我的例子:http:// codepad .ORG/VUgCVPXN
Chr*_*ald 29
这种形式:
module Familiar
def ask_age
return "How old are you?"
end
end
Run Code Online (Sandbox Code Playgroud)
在Familiar上定义#ask_age
为实例方法.但是,您无法实例化模块,因此无法直接访问其实例方法; 你把它们混合到其他类中.模块中的实例方法或多或少直接无法访问.
相比之下,这种形式:
module Familiar
def self.ask_age
return "What's up?"
end
end
Run Code Online (Sandbox Code Playgroud)
定义::ask_age
为模块功能.它可以直接调用,并且当模块混合到另一个类中时不会出现在包含的类中.