为什么ruby模块给了我NoMethod错误?

为什么ruby模块给了我NoMethod错误?,ruby,module,Ruby,Module,这是我的项目树 计划 main.rb 解放党 一些_module.rb main.rb: $LOAD_PATH<<'./lib' require 'some_module' SomeModule::some_func 'p1', 'p2' 但是当我运行main.rb时。 ruby给了我一个命名错误,为什么?您试图在基本模块上调用该方法,这就是为什么会出现错误。如果将此模块包含在类中,则此方法只能作为实例方法使用。因为您不能定义模块的实例,所以您需要这样定义它,并且您

这是我的项目树

  • 计划
    • main.rb
    • 解放党
      • 一些_module.rb
main.rb:

$LOAD_PATH<<'./lib'
require 'some_module'
SomeModule::some_func 'p1', 'p2'  
但是当我运行main.rb时。

ruby给了我一个命名错误,为什么?

您试图在基本模块上调用该方法,这就是为什么会出现错误。如果将此模块包含在类中,则此方法只能作为实例方法使用。因为您不能定义模块的实例,所以您需要这样定义它,并且您可以直接在模块上调用它

module SomeModule
  def self.some_func p1,p2
    puts p1,p2
  end
end
但是,如果希望将其作为实例方法,可以执行以下操作:

#main.rb
$LOAD_PATH<<'./lib'
require 'some_module'

class Foo
  include SomeModule
end

@foo = Foo.new

@foo.some_func 'p1', 'p2'

#lib/some_module.rb
module SomeModule
  def some_func p1,p2
    puts p1,p2
  end
end
#main.rb

$LOAD_PATH您试图调用基本模块上的方法,这就是为什么会出现错误。如果将此模块包含在类中,则此方法只能作为实例方法使用。因为您不能定义模块的实例,所以您需要这样定义它,并且您可以直接在模块上调用它

module SomeModule
  def self.some_func p1,p2
    puts p1,p2
  end
end
但是,如果希望将其作为实例方法,可以执行以下操作:

#main.rb
$LOAD_PATH<<'./lib'
require 'some_module'

class Foo
  include SomeModule
end

@foo = Foo.new

@foo.some_func 'p1', 'p2'

#lib/some_module.rb
module SomeModule
  def some_func p1,p2
    puts p1,p2
  end
end
#main.rb

$LOAD_PATH您正在将
some_func
定义为
SomeModule
的实例方法:

(foo = Object.new).extend(SomeModule)
foo.some_func(:p1, :p2)
但是您正在
SomeModule
上调用它。由于
SomeModule
不是
SomeModule
的实例(它是
Module
的实例),因此您会得到一个
NoMethodError

因此,您需要构造
SomeModule
的实例:

(foo = Object.new).extend(SomeModule)
foo.some_func(:p1, :p2)
或者您需要确保定义
somefunc
某处
SomeModule
是的实例,例如
SomeModule
的单例类(Ruby中的每个对象都是其单例类的实例,实际上是唯一的实例):


您正在将
somefunc
定义为
SomeModule
的实例方法:

(foo = Object.new).extend(SomeModule)
foo.some_func(:p1, :p2)
但是您正在
SomeModule
上调用它。由于
SomeModule
不是
SomeModule
的实例(它是
Module
的实例),因此您会得到一个
NoMethodError

因此,您需要构造
SomeModule
的实例:

(foo = Object.new).extend(SomeModule)
foo.some_func(:p1, :p2)
或者您需要确保定义
somefunc
某处
SomeModule
是的实例,例如
SomeModule
的单例类(Ruby中的每个对象都是其单例类的实例,实际上是唯一的实例):


请说明如何在
SomeModule
中定义
somefunc
。请说明如何在
SomeModule
中定义
somefunc
。但我不是在类中使用它。我只是解释说,如果你是,那么你会像以前一样定义它。从这个答案中得到你所需要的,但我不是在课堂上使用它,我只是解释说如果你是,那么你会像以前一样定义它。从这个答案中得到你所需要的。