gpt4 book ai didi

ruby - 如何在模块中加载未知类?

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

我有一些 rb 文件,都具有相同的结构:

class RandomName < FooBar
end

randomname 是一个随机的类名,它在每个 rb 文件中都会发生变化,但都继承自 Foobar。

我如何从那里的 rb 文件加载所有 randomclass?

最佳答案

我认为解决方案分为两部分:

  1. 如何动态实例化一个类

    一个。使用String#constantize from ActiveSupport

    klass = "SomeNamespace::SomeClassName".constantize
    klass.new

    使用 Module#const_get (不处理命名空间)

    klass = const_get(:SomeClassName)
    klass.new
  2. 如何检测类名

    在 ruby​​ 中广泛遵循的约定是根据文件包含的类命名文件,因此 random_name.rb 将包含 RandomName 类。如果您遵循此约定,那么您可以执行以下操作:

    Dir["/path/to/directory/*.rb"].each do |file| 
    require file
    file_name = File.basename(file.path, '.rb')
    # using ActiveSupport for camelcase and constantize
    file_name.camelcase.constantize.new
    end

我认为您应该解释一下您要完成的任务。您采用的方法似乎非常规,并且可能有一种更有效的方法来实现您的目标,而无需执行所有这些文件加载​​和具有随机名称的类的动态实例化。

请记住,仅仅因为 ruby​​ 允许您做某事,并不意味着实际去做是个好主意!

关于ruby - 如何在模块中加载未知类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5441510/

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