为什么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
$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
。但我不是在类中使用它。我只是解释说,如果你是,那么你会像以前一样定义它。从这个答案中得到你所需要的,但我不是在课堂上使用它,我只是解释说如果你是,那么你会像以前一样定义它。从这个答案中得到你所需要的。