Ruby跨文件调用类异常:调用LastClass却执行FirstClass求助
解决Ruby文件引入后类调用不符合预期的问题
嘿,我来帮你捋捋这个问题——看起来你遇到的情况可能是两个小细节没注意到:
1. 先搞清楚Ruby加载文件时的执行逻辑
当你用require './secondfile.rb'引入第二个文件时,Ruby会逐行执行这个文件里的所有顶层代码。你给出的第二个文件代码是:
class Firstclass end class Lastclass end
这里其实只是完成了两个类的定义,并不会主动“运行”Firstclass的功能——除非你在第二个文件里额外写了比如Firstclass.new、调用它的方法这类触发代码。如果确实出现了Firstclass被执行的情况,建议仔细检查第二个文件,是不是不小心加了这类会触发它的代码。
2. 调用类的方式可能错了
你提到调用newfile.Lastclass,但从你的代码来看,Lastclass是定义在顶级命名空间下的类,并没有被包裹在newfile模块里。所以正确的调用方式应该是直接写Lastclass(比如Lastclass.new),而不是加newfile前缀。如果你的第一个文件里错误地用了newfile.Lastclass,Ruby可能会找不到这个类,反而如果之前有Firstclass的相关执行代码,就会让你误以为是执行了Firstclass。
给你个修正后的示例参考:
第一个文件(比如命名为firstfile.rb)
require './secondfile.rb' # 直接调用顶级命名空间下的Lastclass last_class_instance = Lastclass.new # 这里添加你要执行的具体逻辑
第二个文件(secondfile.rb)
class Firstclass end class Lastclass end
这样运行firstfile.rb的时候,就只会加载两个类的定义,然后执行你指定的Lastclass相关逻辑,不会触发Firstclass的执行(除非你主动去调用它)。
内容的提问来源于stack exchange,提问作者pthree
相关产品推荐
相关产品推荐

