【问题标题】:What does it mean when a Ruby script starts with Gem?Ruby 脚本以 Gem 开头是什么意思?
【发布时间】:2014-08-30 20:55:47
【问题描述】:

我正在努力学习 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" 是什么意思?

【问题讨论】:

    标签: ruby gem require


    【解决方案1】:

    这是gem method that Rubygems adds to Kernel(在当前的 Ruby 版本中默认需要 Rubygems)。它激活 gem 的特定版本(在本例中为 amqp gem 的 1.3.0 版),这意味着将 gems lib 目录(或 gem 指定的任何目录)添加到您的 LOAD_PATH,以及它拥有的任何依赖 gem 的 lib 目录。

    它还会检查是否存在与任何已激活的 gem 不兼容的版本。

    所有宝石在您使用时都会被激活。这通常发生在您致电require 时。调用gem 会激活gem,但不会require 中的任何文件,因此下面的require "amqp" 行(注意amqp gem 之间的区别,gem 方法amqp 指的是文件,它包含在amqp gem 中,是require 方法所指的内容)。

    此方法用于确保您使用的是特定版本的 gem,而无需使用 Bundler(或类似的东西)。 Bundler 还有一个在Gemfiles 中使用的gem 方法,但这是一种不同(但相似)的方法。

    它还用于指定您想使用一个库的 gem 版本,该库也是标准库的一部分(例如,如果您想使用更新的版本)。例如,与 Ruby 一起分发的 Yaml 库是 Psych,它也是 available as a gem

    【讨论】:

      猜你喜欢
      • 2012-05-07
      • 2010-12-02
      • 1970-01-01
      • 2022-12-11
      • 2010-10-07
      • 2017-01-28
      • 1970-01-01
      • 2014-11-07
      相关资源
      最近更新 更多