gpt4 book ai didi

ruby-on-rails - 来自 stdlib 的 Ruby 单例。如何杀死一个实例

转载 作者:数据小太阳 更新时间:2023-10-29 08:54:40 28 4
gpt4 key购买 nike

我正在学习 ruby​​,我就是这样。

require 'singleton'
class Lab
include Singleton
def initialize
puts 'initializing'
end
end

l1 = Lab.instance
l2 = Lab.instance

尽管我已经完成了两次 Lab.instance,但我只收到一次“正在初始化”消息。这意味着单例正在工作。太棒了!

Rails 在开发模式下使用 const_remove 杀死所有常量,以便在下一个请求时重新加载模型和 Controller 。

我想在这里尝试类似的东西。我想同时杀死 l1 和 l2,这样当我执行 Lab.instance 时,会创建一个新实例并收到消息“正在初始化”。

有没有办法实现我的要求?

谢谢

最佳答案

Singleton 混合使用了一种相当简单的机制,您可以轻松地重新实现它。如果你看一下它的核心,你会发现它使用一个名为 @singleton__instance__ 的实例变量进行缓存。因此,重置此变量应该可以完成工作。因此,如果您尝试将此类方法添加到您的类中:

def self.reset
@singleton__instance__ = nil
end

你可以这样做:

l1 = Lab.instance #=> initializing
l2 = Lab.instance #=> nothing
Lab.reset
l3 = Lab.instance #=> initializing
l4 = Lab.instance #=> nothing

关于ruby-on-rails - 来自 stdlib 的 Ruby 单例。如何杀死一个实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4429955/

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