gpt4 book ai didi

ruby-on-rails - 子类的循环依赖

转载 作者:太空宇宙 更新时间:2023-11-03 17:51:48 25 4
gpt4 key购买 nike

假设我们正在使用 Rails 或只是 ActiveSupport::Dependencies 模块。现在让我们看看这段代码:

动物.rb

class Animal
CHILD = {
cat: Cat
}

# factory!?
def self.child(name)
CHILD[name].new
end
end

猫.rb

class Cat < Animal
end

狗.rb

class Dog < Animal
end

在加载所有类之前的某处:

Cat.new

该代码将导致 B is not a class (TypeError) (activesupport 3.x) 或 Circular dependency detected while autoloading constant B (activesupport 4.x ) 因为它还没有创建,但是类的名称已经在类表中了。

要解决此问题,可以要求'a',然后A 将要求B

能否针对以下问题给我一些更好的解决方案?

最佳答案

如果你不想/不能使用require,你应该避免循环依赖。避免它们的一种方法是用运行时级别的调用替换类加载级别的调用:

class Animal
CHILD = {
cat: 'Cat'
}

def self.child(name)
CHILD[name].constantize.new
end
end

确实 self.child 现在不能在类级别调用,否则您将再次处于循环依赖上下文中。

关于ruby-on-rails - 子类的循环依赖,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23621038/

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