我正在尝试在Rails中使用英文gem,这样我就可以访问$LAST_MATCH_INFO
,$~
的不那么神秘的版本。然而,尽管需要英语,$LAST_MATCH_INFO
始终是nil
,而$~
仍然有效。
这是我对irb
:的预期行为
'foo' =~ /o/ # => 1
$~ # => #<MatchData "o">
$LAST_MATCH_INFO # => nil
require 'english' # => true
$LAST_MATCH_INFO # => #<MatchData "o">
$LAST_MATCH_INFO == $~ # => true
这是rails console
:的破坏行为
'foo' =~ /o/ # => 1
$~ # => #<MatchData "o">
$LAST_MATCH_INFO # => nil
require 'english' # => false
# (Means it's already been required)
$LAST_MATCH_INFO # => nil
$LAST_MATCH_INFO == $~ # => false
它可以在irb
中工作,但不能在rails console
或web控制台中工作。请注意,require 'english'
返回false
,因为gem已经加载,但它不起作用。
我错过了什么?
TL;DR:从Gemfile中删除了gem 'english'
,工作正常
几个月后,我又回到了这个问题上,想明白了。
在我急于使用English
库的过程中,我将english
gem添加到了Gemfile
中。(注意大写)。
虽然English
是我想要的内置库,但对于描述性全局变量,english
是一般英语语言处理的瑰宝。
通常,require 'english'
需要gem,而require 'English'
需要库。但是,我使用的是不区分大小写的Mac OS X系统,所以require 'English'
首先找到了english
gem并使用了它。这意味着Ruby不可能加载English
库,这就是为什么它从未工作过的原因。