Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/ant/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby 在模块内调用方法_Ruby - Fatal编程技术网

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,然后我可以直接调用testx
XYZ
被称为常量,而不是变量,仅供参考。@PetrGazarov感谢您的反馈,请参阅编辑
XYZ
被称为常量,而不是变量,仅供参考。@PetrGazarov感谢您的反馈,请参阅编辑谢谢您的回答,但我想很多类都需要“扩展自我”(我有很多类,比如X),这样可以减少类解决方案的冗余,如果我错了,请纠正我:)下一票是我的。没错,这会创建一个类方法
testx
,但它也会创建一个不需要的同名实例方法。与直接创建类方法相比,这是一个奇怪的选择。@CarySwoveland感谢您的评论/反馈谢谢您的回答,但我想很多类都需要“扩展自我”(我有很多类,比如X),这使得类解决方案不那么冗余,如果我错了,请纠正我:)反对票是我的。是的,这会创建一个类方法
testx
,但也会创建一个不需要的同名实例方法。与直接创建类方法相比,这是一个奇怪的选择。@CarySwoveland感谢您的评论/反馈