我想我对ruby脚本顶部的require / include语句有基本的了解,比如
require 'rspec'
这些陈述很容易google并找到相关结果。但有时我见过像
这样的宝石声明gem 'rspec'
这条线做什么?
答案 0 :(得分:6)
在ruby代码中,gem(gem_name, *requirements)
中定义的Kernel
告诉Ruby加载特定版本的gem_name
。当你安装了同一个gem的多个版本时,这很有用。
例如,如果您安装了rspec
的两个版本,例如2.12.0
和2.13.0
,则可以在gem
之前调用require
以使用特定版本。请注意gem
应该在require
来电之前。
gem 'rspec', '=2.12.0'
require 'rspec'
没有版本的gem 'gem_name'
使用您计算机上的最新版本,这是不必要的。您可以在没有require
的情况下致电gem
以获得相同的行为。
此外,在Bundler :: Dsl中,gem
用于告诉bundler准备/安装特定版本的ruby gems。你会在Gemfile
答案 1 :(得分:4)
在Rubygems之前,require
的原始行为是搜索文件的$LOAD_FILES
变量中列出的所有目录,并加载它找到匹配的第一个目录。如果未找到匹配的文件,require
将引发LoadError
。
Rubygems改变了这个过程。使用Rubygems,require
将像以前一样搜索现有的$LOAD_PATH
,但如果找不到匹配的文件,则Rubygems将搜索计算机上已安装的gem以进行匹配。如果找到包含匹配文件的gem,则该gem将激活,然后重复$LOAD_PATH
搜索。激活gem的主要作用是将gems lib
目录添加到加载路径中。通过这种方式,第二次加载路径搜索将找到所需的文件。
通常这意味着您安装的最新版本的gem会被激活。有时你会想要使用不同版本的gem,为此你可以使用gem
method。 gem
方法激活gem,您可以指定所需的版本,但不需要任何文件。当您以后需要所需的文件时,您将从您指定的gem版本中获取它们。
答案 2 :(得分:-1)
在Ruby中,gem是具有开箱即用功能的包(作为其他编程语言中的库)。
您使用Ruby项目的宝石可以通过名为“bundler”的工具轻松管理,只需谷歌即可。您发布的代码片段是specler文件的一部分,bundler用它来安装和更新您为项目指定的所有库。
如果您正在开发Ruby on Rails,使用gem,使用bundler管理它们是非常常见的,所以说最佳实践。
宝石很棒,因为有很多有用的库可以扩展默认功能,例如rails,你可以开箱即用!
有关宝石的列表,请访问rubygems.org