2013-07-18 47 views
-1

我遇到了特殊字符(或西班牙語中的重音)正常化問題。我創建了一個GEM作爲學習練習(關於如何創建,安裝和使用個人創業板),但不幸的是,當我在另一個ruby文件中加載gem時,我遇到了標題錯誤。下面的代碼顯示了我的創業板是由什麼構成的(我知道代碼非常糟糕,但這又是一次學習練習)。個人創建的GEM的語法錯誤(意外' n',期待tCOLON2或'['或'。'(SyntaxError))

#!/bin/env ruby 
# encoding: utf-8 

module SpanishStringNormalizer 

    class Normalizer 

     def self.spanishNormalize (aString) 

       while (aString.include? "á") ==true || 
         (aString.include? "é") ==true || 
         (aString.include? "í") ==true || 
         (aString.include? "ó") ==true || 
         (aString.include? "ú") ==true   do 

         aString ["á"]= "a" if aString.include? "á" 
         aString ["é"]= "e" if aString.include? "é" 
         aString ["í"]= "i" if aString.include? "í" 
         aString ["ó"]= "o" if aString.include? "ó" 
         aString ["ú"]= "u" if aString.include? "ú" 

       end #end of while 

       return aString 

     end #end of spanishNormalize 

    end #end of class 

end #end of module 

然而,當我打開另一ruby文件我得到以下錯誤

/Users/Andre/.rvm/rubies/ruby-1.9.3-p429/lib/ruby/這種寶石site_ruby/1.9.1/ruby​​gems/custom_require.rb:60: `require':/Users/Andre/.rvm/gems/ruby-1.9.3-p429/gems/Spanish String Normalizer-0.0.0/lib /spanish_str_normalizer.rb:25:語法錯誤, 意外的'\ n',期待tCOLON2或'['或'。' (SyntaxError)

我一直嘗試不同的東西,但我一直無法解決它。有人能幫助我確定我在做什麼錯誤嗎?

我的創業項目都可以在這裏找到:https://github.com/betogess506/Spanish-String-Normalizer

+0

在我的環境中,它不返回錯誤。 – sawa

+4

看起來錯誤是由配置引起的,在測試之前缺少'gem build'或'gem install'步驟,或者某些代碼在此處未顯示? @sawa:雖然我確信你試圖表現出一些「強硬的愛」,但我認爲這個評論對OP來說過於消極。國際海事組織需要一段時間才能進行專業編碼,然後才能獲得有用的評論 –

+0

@NeilSlater好吧,我會重新說明它:除了錯誤(我無法複製),問題中的代碼有很多問題。 – sawa

回答

4

我試過你的代碼,但我無法重現我的系統(無論使用Ruby 2.0.0或1.9.3)上的錯誤。但是我認爲這是不值得困擾自己troublshooting的問題,因爲你的代碼可以僅使用String#tr方法寫成:

module SpanishStringNormalizer  
    def self.normalize(string) 
    string.tr('áéíóú', 'aeiou') 
    end 
end 

SpanishStringNormalizer.normalize('fóó') 
# => "foo" 
+0

你的解決方案更清潔:) +1 –

+1

這是更簡潔的代碼,與寶石一樣,但不能解決OP問題。問題中可能沒有顯示代碼是問題。 –

+1

@ toro2k我只是運行在終端檢查你的方法,並得到如下輸出。紅寶石版本1.8.7 SpanishStringNormalizer.normalize('fóó') =>「fuuuu」 – Inaccessible

0

由於@sawa建議,你的代碼味道。聞到臭味。你可以這樣寫:

#!/bin/env ruby 
# encoding: utf-8 

module SpanishStringNormalizer 
    REPLACEMENTS = { 
    "á" => "a", 
    "é" => "e", 
    "í" => "i", 
    "ó" => "o", 
    "ú" => "u" 
    } 

    class Normalizer 
    def self.spanishNormalize (aString) 
     regex = Regexp.union(REPLACEMENTS.keys) 
     aString.gsub(regex, REPLACEMENTS) 
    end 
    end 
end 

至於你的原始問題,錯誤不在你的寶石。我下載並要求它,並要求工程就好了。

+2

另外,你的方法'spanishNomalize'實際上應該叫做'normalize',因爲'SpanishStringNormalizer'已經暗示這是用於西班牙語的。另一件事是用這種簡單程度,你實際上不需要嵌套的'Normalizer'類。 –

相關問題