尝试访问"嵌套方法时的NoMethodError" (或def)在同一模块中

时间:2016-11-28 06:13:59

标签: ruby

下面的代码片段给了我一个NoMethodError。我有点困惑为什么它会给我一个错误,为什么我在模块中找不到任何有关嵌套方法的东西。有人可以解释为什么这不起作用吗?我可以窝#34; defs"在模块中?

module HowToBasic
  module_function

  def say_id_and_say_name(id)

    # nested method
    def say_id(id)
      p id
    end

    # errors here with `say_id_and_say_name': 
    # undefined method `say_id' for HowToBasic:Module (NoMethodError)
    # from teststuff.rb:24:in `<main>'
    say_id(id)
  end

end

HowToBasic.say_id_and_say_name("99999")

版本: 红宝石2.3.1p112

我看了一下,却找不到任何关于此的内容:

1 个答案:

答案 0 :(得分:4)

您在方法定义中缺少self关键字 - 没有它say_id_and_say_name只是一个实例方法,因此无法在模块上调用它。

module HowToBasic
  module_function

  def self.say_id(id)
    p id
  end

  def self.say_id_and_say_name(id)    
    say_id(id)
  end    
end

HowToBasic.say_id_and_say_name("99999")