“英语”全局变量在Rails中不起作用

bos*_*cko 2 ruby regex gem ruby-on-rails global-variables

我正在尝试在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
Run Code Online (Sandbox Code Playgroud)

这是来自的损坏行为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
Run Code Online (Sandbox Code Playgroud)

它可以在或Web控制台中使用irb,但不能使用rails console。注意require 'english'返回false是因为gem已经被加载了,但是还行不通。

我想念什么?

bos*_*cko 5

TL; DR:gem 'english'从Gemfile中删除了,可以正常工作。

最后我回到了这几个月之后,并弄清楚了。

为了方便使用English,我将english宝石添加到了我的Gemfile。(注意大写)。

虽然English是内置的图书馆,我想,为了描述的全局变量,english是通用英语语言处理的宝石。

通常,require 'english'将需要gem和require 'English'库。但是,我使用的是不区分大小写的 Mac OS X系统,因此首先require 'English'找到了englishgem并使用了它。这意味着Ruby无法加载该English库,这就是为什么它从未起作用的原因。