使用针对多个负载的类级元编程来保护Ruby类

Ruby需要的一个怪癖是,虽然一般来说,它只会加载一次文件,如果该文件可以通过多个路径(例如符号链接)访问,则可能需要多次.当存在诸如类级元编程之类的事情时,这会导致问题,或者通常是在文件加载时应该只执行一次,多次执行的代码.

从Ruby类定义中,有什么方法可以判断该类是否已经定义过?我以为定义了?或者Object.const_get可能会告诉我,但是看起来这个类看起来就像它被打开一样.

最佳答案 这不是第二段中您的问题的答案,而是第一段中问题的解决方案.实际上,通过检查是否已经定义了类,您无法避免多个文件加载.

而不是做:

require some_file_name

做:

require File.realpath(some_file_name)

通过这样做,指向同一真实文件的不同符号链接将被标准化为相同的真实文件名,因此它们的多次加载将被require正确地过滤.

参看this question和那里的答案.

点赞