gem和require的区别(require open-uri)

29

我只是想自己理解一下。

我正在使用nokogiri宝石(用于解析HTML)。如果我正确地打开URL,我需要使用宝石“open-uri”中的一个方法。

但是当我将其包含在我的Gemfile中(在Windows开发人员的机器上):

gem 'open-uri' - 在bundle install期间会出现无法找到宝石的错误。

所以如果我使用require 'open-uri' - 它可以工作。

那么有人能够解释一下发生了什么吗?

2个回答

57
你正在使用 bundler 来管理你的gem依赖,这样做是正确的。但是 OpenUri 是Ruby标准库的一部分,所以如果你想在代码中使用它,你只需要require它即可。

谢谢。在哪里最好需要在gemfile中要求'open-uri'或其他地方? - WHITECOLOR
2
通常你应该在使用库的文件顶部进行导入。如果这个回答有帮助,请接受它。 - lucapette
1
小心:open-uri 被认为是致命的:https://sakurity.com/blog/2015/02/28/openuri.html - Simon B.
这里有关于open-uri的很棒的信息:https://janko.io/improving-open-uri/ - Nicolas Garcia III

9

require 用于加载另一个文件并执行其所有语句,以此导入文件中的所有类和方法定义。 require 还会跟踪先前已经被加载过的文件,以免重复执行。

RubyGem 是一个软件包,通常称为“gem”。 Gems 包含打包好的 Ruby 应用程序或库。RubyGems 软件本身允许您轻松下载、安装和操作系统上的 gems。 - 什么是 Gem?:

Gemfile 由 bundler 使用,以安装指定的 gems。

open-uri 不是 gem,而是 Ruby 标准库的一部分,因此只需要使用 require 命令。


谢谢。在Gemfile中还是其他地方要求“open-uri”最好? - WHITECOLOR
1
如果您只在一个地方使用它,我建议在调用之前或者函数/文件的开头进行声明。 - jlundqvist

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接