gpt4 book ai didi

Ruby:如何要求和实例化目录中的所有文件?

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

我正在开发一个 Gem,它允许用户在特定目录中自动请求、实例化和注册类。我只是不确定如何实现这一目标。这是我到目前为止想出的...

Dir[Dir.pwd + '/extensions/*.rb'].each do |file|
require file
extension_class = # instantiate the class here
MyApp.extensions << extension_class
end

如何在不知道它叫什么的情况下实例化类?

最佳答案

听起来您正在制作一个用于编写软件扩展的系统。由于扩展类在某些方面可能都很相似,例如共享一些通用方法,因此拥有一个名为 Extension 的基类可能是有意义的,所有扩展类都从该基类继承。

事实上,这对所陈述的问题非常有用,因为当用户从您的类继承时,您可以检测到它,并将子类添加到列表中。下面是一些概念验证代码:

class Extension
class << self
attr_reader :list
end
@list = []

def self.inherited(klass)
@list << klass.new
end
end

# The MyExt class would be in another file, loaded by require.
class MyExt < Extension
end

p Extension.list # => [#<MyExt:0xb777d884>]

如果出于某种原因不想使用子类化,将 Extension 设为模块并使用 included 钩子(Hook)而不是 同样容易继承.

就我个人而言,我只是删除对 .new 的调用,因为我没有看到立即实例化该类的理由,但这取决于您。我只会存储一个类列表。

关于Ruby:如何要求和实例化目录中的所有文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9337592/

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