我正在研究Ruby,我在几个实例中看到了一件事,但是无法理解的是以关键字gem开头的脚本。
Sensu code中可以看到一个例子。
gem "amqp", "1.3.0"
require "amqp"
require File.join(File.dirname(__FILE__), "base")
我理解访问另一个gem的require语句,但确切的 gem“amqp”,“1.3.0”是什么意思?
答案 0 :(得分:3)
这是gem
method that Rubygems adds to Kernel
(当前Ruby版本默认需要Rubygems)。它激活特定版本的gem(在这种情况下为amqp
gem的版本1.3.0),这意味着gems lib
dir(或者gem所指定的任何目录) )已添加到您的LOAD_PATH
,以及它所拥有的任何相关宝石的lib
目录。
它还检查与任何已激活的宝石没有版本不兼容。
使用时,所有宝石都会被激活。这通常在您致电require
时发生。调用gem
会激活gem,但不会require
来自它的任何文件,因此下面的行require "amqp"
(请注意amqp
gem gem
方法引用的,以及{{1>} 文件,它包含在amqp
gem中,是amqp
方法正在提及)。
此方法用于确保您使用特定版本的gem,而无需使用Bundler(或类似的东西)。 Bundler还有require
中使用的gem
方法,但这是一种不同(但相似)的方法。
它还用于指定您想要使用也是标准库一部分的库的gem版本(例如,如果您想使用更新版本)。例如,与Ruby一起分发的Yaml库是Psych,也是available as a gem。