使用 ruby gem 时什么时候需要 'require'?

When is the 'require' necessary when using a ruby gem?

我注意到有些 gem 必须像这样 require 'a_gem' 将它包含在要使用它的文件中,但情况并非总是如此。

我要自己编一个gem。使用时不想在.rb文件中加入require 'my_gem'怎么办?

这没有意义。如果你想写一个Gem并使用它,它需要在某处被要求。

这个“某处”可能在您的某个脚本中是明确的,它可以写在 Gemfile 中,也可能是您的脚本所需的另一个 script/gem 所要求的。

如果您编写 gem,Ruby 将不会自动将其包含在您的所有脚本中。

最后,如果您发布它,地球上的每个 Ruby 脚本都应该神奇地需要它并执行您的代码吗?

我想您看到的没有使用 require 'a_gem' 的项目正在使用 Gem 文件。

通常,使用 gem 的应用程序需要要求 gem:

require "my_awesome_gem"
MyAwesomeGem.do_something_great

但是,如果应用程序正在使用 bundler,它会在名为 "Gemfile":

的文件中定义应用程序的 gem
source 'http://rubygems.org'
gem 'my_awesome_gem'

然后应用程序可能会以自动需要 Gemfile 中指定的所有 gem 的方式调用捆绑器:

require "bundler"
Bundler.require
MyAwesomeGem.do_something_great

Rails 项目使用 Bundler.require,因此 Rails 应用程序无需明确要求 gem 即可使用它:只需添加 [=31] =] 到 Gemfile 然后去。

有关 Bundler.require 的更多信息,请参阅 bundler documentation

有关 Rails 如何使用 Bundler 的更多信息,请参阅 Justin Weiss 的 How Does Rails Handle Gems?