我正在尝试用Ruby(而不是Rails)编写游戏,以此作为一种更好地教给自己的方法.(意思是,我想这样做是正确的,但是如果我想要窃取一些不能用于Ruby的东西,我会切换语言.)我遇到了一个需要命令的问题,而我我想知道是否有一个干净的方法来做以下事情.
到目前为止,这是我的结构:
game
Gemfile
src
models
character.rb
game_object.rb
init.rb
Run Code Online (Sandbox Code Playgroud)
init.rb不需要单独列出每个文件,而是需要这样的文件:
Dir['./src/**/*.rb'].each do |app|
require app
end
Run Code Online (Sandbox Code Playgroud)
到目前为止,game_object.rb非常简单,但是character.rb看起来像这样:
module Game
class Character < Game::GameObject
attr_accessor :name
def initialize(name)
@name = name
end
end
end
Run Code Online (Sandbox Code Playgroud)
不幸的是,如果我这样做,我得到"未初始化的常量Game :: GameObject(NameError)",除非我在其他文件之前明确要求game_object.
在我看来,我有几个选择:
这些似乎都比它应该更复杂.有更干净的方式吗?
把它放在那里:更多的代码并不意味着"脏",就像更少的代码并不意味着"干净"一样.
从长远来看,手动需要你的文件会让你不那么头疼 - 它解决了加载订单问题,并防止你需要你实际上不需要的文件.此外,稍后查看您的代码的任何人都可以清楚地看到应用程序中加载的内容.
我的建议:
src文件夹,这是多余的 - 您的Ruby应用程序都是源代码.例:
game/
bin/
gamerunner
Gemfile
lib/
game.rb
game/
game_object.rb
models/
character.rb
spec/
spec_helper.rb
models/
character_spec.rb
Run Code Online (Sandbox Code Playgroud)
你正在编写规格/测试,不是吗?
然后,在lib/game.rb:
require 'game/game_object.rb'
# require the rest of your library as you build it
module Game
end
Run Code Online (Sandbox Code Playgroud)
在你的init:
require 'game'
require 'models/character.rb'
Run Code Online (Sandbox Code Playgroud)
更清洁,更容易从以后提取,应该解决您的问题.
| 归档时间: |
|
| 查看次数: |
540 次 |
| 最近记录: |