-1

我在规范化特殊字符(或西班牙语的重音符号)时遇到了问题。我创建了一个 GEM 作为学习练习(关于如何创建、安装和使用个人 gem),但不幸的是,每当我将 gem 加载到另一个 ruby​​ 文件时,我都会遇到标题错误。下面的代码显示了我的 GEM 是由什么组成的(我知道代码非常糟糕,但它又是一个学习练习)。

#!/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

但是,当我将此 gem 加载到另一个 ruby​​ 文件时,我收到以下错误

/Users/Andre/.rvm/rubies/ruby-1.9.3-p429/lib/ruby/site_ruby/1.9.1/rubygems/custom_require.rb:60:in `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 或 '[' 或 '.' (语法错误)

我一直在尝试不同的事情,但我无法解决它。有人可以帮我确定我在哪里做错了吗?

我的 GEM 项目可以在这里找到:https ://github.com/betogess506/Spanish-String-Normalizer

4

2 回答 2

4

我已经尝试了您的代码,但无法在我的系统上重现该错误(既不使用 Ruby 2.0.0 也不使用 1.9.3)。但是我认为不值得麻烦自己解决问题,因为您的代码可以仅使用以下String#tr方法编写:

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

SpanishStringNormalizer.normalize('fóó')
# => "foo"
于 2013-07-18T09:23:59.393 回答
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

至于您最初的问题,错误不在您的宝石中。我下载并要求它,要求工作得很好。

于 2013-07-18T09:25:31.033 回答