2015-11-24 71 views
1

我想在Rails中使用英文寶石,所以我可以訪問$LAST_MATCH_INFO,這是$~的不太神祕的版本。不過,儘管要求英文,$LAST_MATCH_INFO總是nil,而$~仍然有效。'英語'全局變量在Rails中不起作用

這是我從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,因爲該寶石已經加載,但它不起作用。

我錯過了什麼?

回答

2

TL; DR:從Gemfile中刪除了gem 'english',作品。

我最終回到了這個月的晚些時候並找出答案。

在我很不習慣使用English library時,我將english gem添加到我的Gemfile。 (注意大寫)。

雖然English是我想要的內置庫,對於描述性全局變量,english是一般英語處理的寶石。

通常,require 'english'需要寶石,require 'English'需要庫。不過,我使用的是不區分大小寫的 Mac OS X系統,所以require 'English'找到了english寶石第一個並使用了它。這意味着Ruby不可能加載English庫,這就是爲什麼它從來沒有工作。