gpt4 book ai didi

ruby-on-rails - 在 ruby​​ (NoMethodError) 模块中定义一个方法

转载 作者:数据小太阳 更新时间:2023-10-29 06:38:51 24 4
gpt4 key购买 nike

我正在学习 ruby​​,我遇到了一些我不明白的事情。我知道 ruby​​ 中的 modules 用于与 :: (或 .) 命名空间并与 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里面了,为什么我还要重复我自己并把Familiar::greeting 您可以通过以下链接在线测试我的示例:http://codepad.org/VUgCVPXN

最佳答案

Ruby documentation on Module在其介绍文本中回答了这个问题。

这种形式:

module Familiar
def ask_age
return "How old are you?"
end
end

#ask_age 定义为 Familiar 上的实例 方法。但是,你不能实例化Modules,所以你不能直接得到它们的实例方法;您将它们混合到其他类中。模块中的实例方法或多或少无法直接访问。

相比之下,这种形式:

module Familiar
def self.ask_age
return "What's up?"
end
end

::ask_age 定义为一个模块函数。它是直接可调用的,并且当模块混合到另一个类中时不会出现在包含的类中。

关于ruby-on-rails - 在 ruby​​ (NoMethodError) 模块中定义一个方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25322009/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com