使用 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?。
我注意到有些 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":
的文件中定义应用程序的 gemsource '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?。