您得到的错误是 Ruby 如何解释代码的结果。您的代码包含一个类定义和一个包含的类主体(介于class
和 final之间end
)。
当 Ruby 解释器加载文件时,类主体执行一次。当解释器处理正文时,会执行各种语句。当遇到想要的调用delayTime
时,该方法尚未定义。
你有几种方法来处理这个问题。首先,您可能不希望在加载时执行类主体中的代码,而是在调用类(实例或类本身)上的方法时执行。
这可以通过将逻辑包装在方法中来实现,例如
class Main
def execute
...
delayTime
...
end
def delayTime
...
end
end
Main.new.execute # Instantiate the class and execute the wanted method
但是,如果您真的想在加载时执行代码,并且仍然调用定义的方法,则需要进行一些更改。首先,您需要在执行调用代码之前定义方法(记住在加载时)。除了在调用代码之前定义它,您还需要确保将其定义为类方法(通过在方法前面加上语法self.
或通过使用语法打开类定义并class << self ... end
在那里定义方法)。这是必需的,因为在执行类主体时不知道类的实例。鸡和蛋的情况。
修改后的版本看起来像这样:
class Main
def self.delayTime
...
end
...
self.delayTime # Could also be called as Main.delayTime
....
end
最后是一个打开类定义的例子:
class Main
class << self
def delayTime
...
end
end
...
self.delayTime # Could also be called as Main.delayTime
....
end
但是请注意,通过在类主体本身中放置逻辑,您可能会遇到一些不需要的问题,因为您的程序超出了单个文件并且您开始包含(require
/ load
)多个文件。但是,那是另一天的故事。