gpt4 book ai didi

ruby - 在非 Rails Ruby 应用程序中要求所有文件的干净方法?

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

我正在尝试用 Ruby(而不是 Rails)编写游戏,以此来更好地自学。 (意思是,我想正确地做这件事,但是如果我想硬塞一些对 Ruby 不起作用的东西,我会切换语言。)我遇到了 require order 的问题,我我想知道是否有一种干净的方法来执行以下操作。

到目前为止,这是我的结构:

game
Gemfile
src
models
character.rb
game_object.rb
init.rb

init.rb 不需要单独列出每个文件,而是需要这样的文件:

  Dir['./src/**/*.rb'].each do |app|
require app
end

到目前为止,game_object.rb 非常简单,但是 character.rb 看起来像这样:

module Game
class Character < Game::GameObject
attr_accessor :name

def initialize(name)
@name = name
end
end
end

不幸的是,如果我这样做,我会得到“未初始化的常量 Game::GameObject (NameError)”,除非我在其他文件之前明确要求 game_object。

在我看来,我有几个选择:

  1. 先在 init.rb 中加载 game_object(和其他父类(super class))。
  2. 在 character.rb 中需要 game_object,这似乎有问题,因为根据我使用的路径,我的理解是它可能会多次加载文件。
  3. 单独加载每个文件并完全手动管理顺序,因此我可以完全控制。

这些似乎都比它应该的要复杂。有更清洁的方法吗?

最佳答案

只是放在那里:更多的代码并不意味着“脏”,就像更少的代码并不意味着“干净”一样。

从长远来看,手动请求您的文件会减少您的头痛——它解决了加载顺序问题并防止您请求您实际上不需要的文件。此外,以后查看您的代码的任何人都可以清楚地看到您的应用中正在加载的内容。

我的建议:

  1. 删除 src 文件夹,它是多余的——您的 Ruby 应用程序是所有源。
  2. 将您的命名空间映射到文件夹
  3. 使用显式要求(当您使用#2 时这会变得更容易:

例子:

game/
bin/
gamerunner
Gemfile
lib/
game.rb
game/
game_object.rb
models/
character.rb
spec/
spec_helper.rb
models/
character_spec.rb

您正在编写规范/测试,对吗?

然后,在lib/game.rb中:

require 'game/game_object.rb'
# require the rest of your library as you build it

module Game
end

在你的初始化中:

require 'game'
require 'models/character.rb'

更干净,以后更容易提取,应该可以解决您的问题。

关于ruby - 在非 Rails Ruby 应用程序中要求所有文件的干净方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8462790/

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