要求'rubygems'

dem*_*mas 35 ruby rubygems require

我已经看到了许多Ruby代码示例(例如,http://www.sinatrarb.com/).这需要什么目的?

# require 'rubygems'
require 'sinatra'
get '/hi' do
  "Hello world!"
end
Run Code Online (Sandbox Code Playgroud)

在所有情况下,代码都可以在没有这一行的情

Car*_*ino 24

require 'rubygems'将调整Ruby loadpath允许您成功地需要通过rubygems安装的宝石,而无需获得LoadError: no such file to load -- sinatra.

从rubygems-1.3.6文档:

当需要RubyGems时,Kernel#require将替换为我们自己的,可以根据需要加载gem.

当您调用require'x'时,会发生以下情况:

  • 如果可以从现有的Ruby加载路径加载文件,那么它就是.

  • 否则,将搜索已安装的gem以查找匹配的文件.如果它在gem'y'中找到,则激活该gem(添加到loadpath).

正常需要返回false的功能,如果已经加载了该文件,则保留该功能.

请参阅Kernel#require的文档以了解为什么这是必要的.

  • 顺便说一下,我不推荐它.请参阅Ryan Tomayko的这篇文章:http://gist.github.com/54177 (7认同)
  • 在Ruby 1.9'require"rubygems"'自动发生.在之前的Rubies中,不会自动需要rubygems,您将收到错误消息.你最好的选择是自动输入它,除非你确定你总是在1.9+以上运行.如果你在1.9+中需要它两次,Ruby将不在乎你的代码会在1.8.whatever中感到高兴. (7认同)

Jak*_*use 17

这通常是多余的.它允许您使用gem命令要求特定宝石的特定版本.

https://guides.rubygems.org/patterns/#requiring-rubygems

  • 实际上,"require'rubygems'"不会加载所需的gem,它只会修改"require"方法的行为. (2认同)

gee*_*oid 13

作为对先前(和正确答案)的补充:Ruby 1.9和更新的内置RubyGems,因此没有必要require 'rubygems'.来源于此

  • 您是对的,只要未使用`--disable-rubygems`构建ruby。 (2认同)