我正在尝试在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已经加载,但它不起作用。
我错过了什么?
答案 0 :(得分:4)
TL; DR:从Gemfile中移除gem 'english'
,无效。
我最后几个月后又回到了这个问题并将其搞清楚了。
我擅长使用English
library,我将english
gem添加到Gemfile
。 (注意大写)。
虽然English
是我想要的内置库,但对于描述性全局变量,english
是一般英语语言处理的宝石。
通常,require 'english'
需要宝石,require 'English'
需要宝库。但是,我使用不区分大小写的 Mac OS X系统,因此require 'English'
首先找到english
gem并使用它。这意味着Ruby不可能加载English
库,这就是它从未起作用的原因。