gpt4 book ai didi

ruby - 使用类级元编程保护 Ruby 类免受多重负载

转载 作者:数据小太阳 更新时间:2023-10-29 07:37:33 27 4
gpt4 key购买 nike

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

有什么方法可以从 Ruby 类定义的内部判断该类之前是否已定义?我以为 defined?Object.const_get 可能会告诉我,但从那些看起来类一打开就定义了。

最佳答案

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

而不是做:

require some_file_name

做:

require File.realpath(some_file_name)

通过这样做,指向同一个真实文件的不同符号链接(symbolic link)将被规范化为同一个真实文件名,因此它们的多次加载将被 require 正确过滤。

比照。 this question以及那里给出的答案。

关于ruby - 使用类级元编程保护 Ruby 类免受多重负载,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34346861/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com