'English' 全局变量在 Rails 中不起作用

'English' global variables don't work in Rails

我正在尝试在 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' returns false 因为 gem 已经加载,但它不起作用。

我错过了什么?

TL;DR:从 Gemfile 中删除了 gem 'english',有效。

我最终在几个月后回到这个问题并弄清楚了。

在我匆忙中使用 English library, I added the english gem 到我的 Gemfile。 (注意大写)。

虽然 English 是我想要的内置库,但对于描述性全局变量,english 是用于一般英语语言处理的 gem。

通常,require 'english' 需要 gem,而 require 'English' 需要库。但是,我使用的是 case insensitive Mac OS X 系统,所以 require 'English' 首先找到了 english gem并使用它。这意味着 Ruby 无法加载 English 库,这就是它从未起作用的原因。