Ruby 在模块内调用方法
我有两个文件。文件Ruby 在模块内调用方法,ruby,Ruby,我有两个文件。文件X是: module A module B XYZ = "5" def testx puts "Test" end end end 文件Y如下所示: require_relative "./B/X" def test puts A::B::XYZ puts A::B.testx end require_relative "./B/X" module A
X
是:
module A
module B
XYZ = "5"
def testx
puts "Test"
end
end
end
文件Y
如下所示:
require_relative "./B/X"
def test
puts A::B::XYZ
puts A::B.testx
end
require_relative "./B/X"
module A
class test
include B
def
puts self.method("testx")
end
end
end
我试图调用Y
中文件X
的testx
,但它不起作用。但是,对常量XYZ的调用是成功的
我做错了什么
更新:文件Y
需要@AlexN指出的类结构,并包含模块B
,然后可以简单地调用testx
。文件Y
如下所示:
require_relative "./B/X"
def test
puts A::B::XYZ
puts A::B.testx
end
require_relative "./B/X"
module A
class test
include B
def
puts self.method("testx")
end
end
end
该方法必须是类方法。看看这个例子
该方法必须是类方法。请参见此示例。此处不需要类。以下是如何仅使用模块完成此操作:
module A
module B
extend self
XYZ = "5"
def testx
puts "Test"
end
end
end
执行
A::B.testx
现在输出测试。问题与模块嵌套无关。问题也一样,如果您直接在A
下定义了testx
,这里不需要类。以下是如何仅使用模块完成此操作:
module A
module B
extend self
XYZ = "5"
def testx
puts "Test"
end
end
end
执行
A::B.testx
现在输出测试。问题与模块嵌套无关。问题是一样的,如果你直接在A
下定义了testx
,我似乎要解决它,我确实需要在Y中使用一个类结构,包括模型B,那么我可以调用testxI来解决它,我确实需要在Y中使用一个类结构,包括模型B,然后我可以直接调用testxXYZ
被称为常量,而不是变量,仅供参考。@PetrGazarov感谢您的反馈,请参阅编辑XYZ
被称为常量,而不是变量,仅供参考。@PetrGazarov感谢您的反馈,请参阅编辑谢谢您的回答,但我想很多类都需要“扩展自我”(我有很多类,比如X),这样可以减少类解决方案的冗余,如果我错了,请纠正我:)下一票是我的。没错,这会创建一个类方法testx
,但它也会创建一个不需要的同名实例方法。与直接创建类方法相比,这是一个奇怪的选择。@CarySwoveland感谢您的评论/反馈谢谢您的回答,但我想很多类都需要“扩展自我”(我有很多类,比如X),这使得类解决方案不那么冗余,如果我错了,请纠正我:)反对票是我的。是的,这会创建一个类方法testx
,但也会创建一个不需要的同名实例方法。与直接创建类方法相比,这是一个奇怪的选择。@CarySwoveland感谢您的评论/反馈