'English'全局变量在 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'返回false,因为gem已经加载,但它不起作用。

我错过了什么?

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

几个月后,我又回到了这个问题上,想明白了。

在我急于使用English库的过程中,我将englishgem添加到了Gemfile中。(注意大写)。

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

通常,require 'english'需要gem,而require 'English'需要库。但是,我使用的是不区分大小写的Mac OS X系统,所以require 'English'首先找到了englishgem并使用了它。这意味着Ruby不可能加载English库,这就是为什么它从未工作过的原因。

相关内容

  • 没有找到相关文章

最新更新