Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
要求';rubygems';_Ruby_Rubygems_Require - Fatal编程技术网

要求';rubygems';

要求';rubygems';,ruby,rubygems,require,Ruby,Rubygems,Require,我已经看到了这行代码的许多Ruby代码示例(例如)。这样做的目的是什么 # require 'rubygems' require 'sinatra' get '/hi' do "Hello world!" end 在任何情况下,代码都可以在没有这一行的情况下工作。这通常是多余的。它允许您使用gem命令要求特定gems的特定版本 require'rubygems'将调整Ruby加载路径,允许您成功地要求通过rubygems安装的gems,而不会得到加载错误:没有这样的文件要加载--sinat

我已经看到了这行代码的许多Ruby代码示例(例如)。这样做的目的是什么

# require 'rubygems'
require 'sinatra'
get '/hi' do
  "Hello world!"
end

在任何情况下,代码都可以在没有这一行的情况下工作。

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


require'rubygems'
将调整Ruby
加载路径
,允许您成功地要求通过rubygems安装的gems,而不会得到
加载错误:没有这样的文件要加载--sinatra

根据rubygems-1.3.6文件:

当需要RubyGems时,内核#require将替换为我们自己的 能够根据需要装载宝石

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

  • 如果可以从现有的Ruby加载路径加载该文件,则 是

  • 否则,将搜索已安装的gems以查找 比赛。如果在宝石“y”中找到,则该宝石被激活 (添加到加载路径)

正常情况下,如果该文件 已加载的已保存


请参阅文档以了解为什么这是必要的。

作为之前(和正确答案)的补充:RubyGems内置了RubyGems,Ruby1.9和更新版本,因此没有真正需要
要求“RubyGems”

顺便说一句,我不推荐。请参阅Ryan Tomayko的帖子:@Carmine Paolino,关于您的评论:Sinatra是一块宝石。如果不使用
require'rubygems'
,确保要求它不会产生错误的最佳方法是什么?在Ruby 1.9中,要求“rubygems”是自动发生的。在以前的Rubies中,rubygems不是自动需要的,您将得到错误。你最好的选择是自动输入,除非你确定你总是在1.9+中运行。Ruby不会在意你在1.9+中是否需要它两次,你的代码在1.8中也会很满意。随便。@yar:我链接的帖子提供了3种解决方案。@Greg:引用Ryan Tomayko:“我用来管理$LOAD_路径的系统与您的库/应用/测试无关。是否使用rubygems是一个环境问题。你的库或应用程序在这件事上应该没有发言权。明确要求rubygems不是必要的,或者是误导性的。“rubygems将选择随后安装的gems的最新版本。如果没有找到此类软件,则会生成异常。为什么这是多余的?这是加载所需gem的最佳方式。实际上,“要求使用‘rubygems’”“不加载所需的gem,它只修改“require”方法的行为。您是对的,只要ruby不是使用
--disable rubygems
构建的。