gpt4 book ai didi

Ruby:从文件实例化对象

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

概述:

main.rb
items/
one.rb
two.rb
three.rb

items/ 中的每个文件都应该有一个人类可读的描述(序列化已经结束),就像这样(但也许 DSL 会更好?):

class One < BaseItem
name "Item one"
def meth
"something"
end

main.rb 应该能够实例化 items/ 目录中的所有对象。这怎么可能实现呢?不熟悉 Ruby,我看到对象模型允许一些非常酷的东西(那些类 Hook 等),但我找不到解决这个问题的方法。

感谢任何输入方式。

编辑:

开枪,我可能错过了它的要点 - 我没有提到的是 items/ 目录中的东西将是动态的 - 将项目视为插件,我想要 main.rb 在运行时自动检测该目录中的所有内容(可能在执行期间强制重新加载)。 main.rb 对其中的对象没有先验知识,它只知道期望从它们那里得到什么方法。

我研究过构建 DSL,考虑定义(在 main.rb 中)一个接受 block 的 spawn 函数。 items/ 中的示例文件如下所示:

spawn do
name "Item name"
def foo
"!"
end
end

spawn 的内部将创建一个基本类型的新对象,并将该 block 传递给 instance_eval。这意味着我需要有一个方法 name 来设置值,但顺便说一下,我还希望可以在 name 下访问该值,所以我不得不绕过它重命名 attr。

我也尝试过继承路线:让每个项目文件都包含一个继承自各种 BaseItem 的类,并通过 inherited ...但这没有用( Hook 从未触发,我现在丢失了代码)。

编辑2:

你可以看看homebrew使用它的公式,这非常接近我想要的 - 我只是没有 ruby​​ 能力来逆向工程它如何处理公式。

最佳答案

这一切都归结为需要这些文件,并确保您在其中实现了所需的功能。

如果您想要更具体的答复,则需要提出更具体的问题。

关于Ruby:从文件实例化对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16298337/

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