为什么有些Ruby项目的文件只包含'要求'声明

时间:2014-08-16 14:25:13

标签: ruby require

我正在查看不同的Ruby客户端实现,有时我会找到像this one这样的文件:

require 'addressable/uri'
require 'twitter/configuration'
require 'twitter/cursor'
require 'twitter/direct_message'
require 'twitter/entity'
require 'twitter/entity/hashtag'
# ... Snipped for brevity; there's 31 lines like this.

require个其他文件外什么都不做。为什么这样做?

2 个答案:

答案 0 :(得分:3)

它只是一个调用其他需求的包装器,因此一个用户脚本不会需要所有依赖项。有时,程序包更喜欢将其功能划分到不同的文件而不是将其所有代码放在单个文件上。它也更容易进行更改和跟踪错误。提交对存储库的更改也可以更轻松。

答案 1 :(得分:1)

Ruby Gems和库通常合并需要声明

这是Ruby库文件中相当常见的习惯用法。例如,请考虑bundler gem命令创建的以下模板:

$ bundler gem foo
$ cat foo/lib/foo.rb
require "foo/version"

module Foo
  # Your code goes here...
end

bundler模​​板希望您使用各种require语句填充此文件,以从 foo / lib / foo / 目录中提取代码。例如:

require "foo/version"

module Foo
  require 'foo/bar' # pull in lib/foo/bar.rb
  require 'foo/baz' # pull in lib/foo/baz.rb
end

如果您愿意,可以将100%的代码放入 lib / foo.rb 。但是,分割文件以使每个文件专注于一个单独的关注点通常被认为是良好的编程习惯,并且主库文件非常便于合并大量Kernel#require语句。