【发布时间】:2011-02-12 07:08:01
【问题描述】:
我已经看到许多带有这一行的 Ruby 代码示例(例如,http://www.sinatrarb.com/)。这样做的目的是什么?
# require 'rubygems'
require 'sinatra'
get '/hi' do
"Hello world!"
end
在所有情况下,代码都可以在没有此行的情况下工作。
【问题讨论】:
我已经看到许多带有这一行的 Ruby 代码示例(例如,http://www.sinatrarb.com/)。这样做的目的是什么?
# require 'rubygems'
require 'sinatra'
get '/hi' do
"Hello world!"
end
在所有情况下,代码都可以在没有此行的情况下工作。
【问题讨论】:
这通常是多余的。不过,它允许您使用 gem 命令要求特定版本的特定 gem。
【讨论】:
作为对先前(和正确答案)的补充:Ruby 1.9 和更新版本内置了 RubyGems,因此实际上不需要 require 'rubygems'。 Source here
【讨论】:
--disable-rubygems 构建的。
require 'rubygems' 将调整 Ruby loadpath 允许您通过 rubygems 成功获取您安装的 gem,而无需获得 LoadError: no such file to load -- sinatra。
来自 rubygems-1.3.6 文档:
当需要 RubyGems 时,将 Kernel#require 替换为我们自己的 它能够按需加载宝石。
当您调用 require 'x' 时,会发生以下情况:
如果文件可以从现有的 Ruby 加载路径加载,它 是。
否则,将在已安装的 gem 中搜索一个文件 火柴。如果在 gem 'y' 中找到它,则该 gem 被激活 (添加到加载路径)。
如果该文件返回 false 的正常要求功能 已经加载的被保留。
请参阅Kernel#require 的文档以了解为什么需要这样做。
【讨论】:
require 'rubygems',确保要求它不会产生错误的最佳方法是什么?