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

时间:2015-11-24 18:19:52

标签: ruby-on-rails ruby regex gem 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

这是来自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已经加载,但它不起作用。

我错过了什么?

1 个答案:

答案 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库,这就是它从未起作用的原因。