Ruby 为什么需要选择最新版本的gem?

Ruby 为什么需要选择最新版本的gem?,ruby,activerecord,rubygems,bundler,Ruby,Activerecord,Rubygems,Bundler,如果我加载一个gem,比如说activerecord,在IRBrequire中选择最新版本的activerecord。在编程方面,是什么影响了选择最新gem版本的决策?require是否执行此操作,或者加载的IRB中是否存在强制要求选择最新版本的内容 以下是bundler安装的我的activerecord gems: ➜ ~ ls -al /Users/robskrob/.rvm/gems/ruby-2.4.1/gems/activere activerecord-4.2.10/ acti

如果我加载一个gem,比如说
activerecord
,在IRB
require
中选择最新版本的
activerecord
。在编程方面,是什么影响了选择最新gem版本的决策?
require
是否执行此操作,或者加载的IRB中是否存在强制要求选择最新版本的内容

以下是bundler安装的我的activerecord gems:

➜  ~ ls -al /Users/robskrob/.rvm/gems/ruby-2.4.1/gems/activere
activerecord-4.2.10/   activerecord-5.0.0.1/  activerecord-5.1.2/    activerecord-5.1.3/    activerecord-5.1.4/    activerecord-5.1.5/    activerecord-5.1.6/    activeresource-5.0.0/
下面是一个IRB会话示例:

➜  ~ irb
2.4.1 :001 > require 'active_record'
 => true
2.4.1 :002 > Gem.loaded_specs['activerecord'].version
 => #<Gem::Version "5.1.6">
2.4.1 :003 >
➜  ~ 内部评级
2.4.1:001>要求“活动记录”
=>正确
2.4.1:002>Gem.加载的_规范['activerecord']版本
=> #
2.4.1 :003 >
如果我加载一个gem,比如说
activerecord
,在IRB
require
中选择最新版本的
activerecord

实际上,它选择的是最新版本

在编程方面,是什么影响了选择最新gem版本的决策?
require
是否执行此操作,或者加载的IRB中是否存在强制要求选择最新版本的内容

这是
require
s作业。更具体地说,这是的工作,而不是


这只是简单的关注点分离:IRb是一个REPL,不是一个包管理系统,它不应该知道任何关于包的信息。

非常感谢您的回答。请原谅我的无知——也许这本身就是一篇SO帖子——但是为什么IRB会话使用RubyGems中猴子补丁版本中的
require
,而不使用Ruby核心库中的
require
?这与IRB无关。Ruby 1.9之后的版本会在启动时自动加载RubyGems库,除非通过传递
--disable RubyGems
显式禁用。RubyGems monkeypatches
Kernel#需要
在gems中查找文件,除了
$LOAD\u路径
。非常旧的RubyGems版本没有做到这一点,您必须首先通过调用
内核#gem
来“激活”gem(将其添加到
$LOAD\u路径中)。monkeypatched版本的
require
将在所有已安装的gem中搜索该文件,如果找到,将为您激活gem。