在ruby 1.8.7模块中修改哈希

在ruby 1.8.7模块中修改哈希,ruby,module,Ruby,Module,我所实现的模块有一个奇怪的问题。我定义了一个键值对的散列,然后用星号替换散列值中的空白。当我尝试通过以下方式在IRB中加载此模块时: load 'lib/protocols/myprotocol.rb' 我发现以下语法错误: SyntaxError: ./lib/protocols/myprotocol/errors.rb:29: syntax error, unexpected '}', expecting ')' ./lib/protocols/myprotocol/errors.rb:4

我所实现的模块有一个奇怪的问题。我定义了一个键值对的散列,然后用星号替换散列值中的空白。当我尝试通过以下方式在IRB中加载此模块时:

load 'lib/protocols/myprotocol.rb'
我发现以下语法错误:

SyntaxError: ./lib/protocols/myprotocol/errors.rb:29: syntax error, unexpected '}', expecting ')'
./lib/protocols/myprotocol/errors.rb:48: syntax error, unexpected kEND, expecting '}'
from (irb):23:in `load'
from (irb):23
有什么想法吗?当我对以下行进行注释时,它会起作用:

STATUS_CODES_MAP.each_value { |val| val.sub!(/\s/, 'Network error ' }
问题似乎与修改模块内的常量哈希有关,但我不知道确切原因。以下是模块代码:

module Protocols
  module MyProtocol
    STATUS_CODES_MAP = {
      'AuthError'    => 'Some error text',
      'AnotherError' => 'Another error text'
    }
    STATUS_CODES_MAP.each_value { |val| val.gsub!(/\s/, '*' }

    def error_from_response_status_code(status_code)
      error_from_response_code(STATUS_CODES_MAP, status_code, 'Unknown protocol error!')
    end

    def error_from_response_code(errors, code, unknown_error_msg)
      if errors.has_key?(code)
        return Base.error_from_string(errors[code])
      else
        RemoteError.new(unknown_error_msg)
       end
    end

    module_function :error_from_response_status_code
  end
end

提前感谢

似乎您缺少了一个

vs


似乎您缺少了一个

vs

此处存在语法错误。)最后是不见了

除此之外,修改散列值应该没有任何问题

此处存在语法错误。)最后是不见了

除此之外,修改散列值应该没有任何问题

STATUS_CODES_MAP.each_value { |val| val.gsub!(/\s/, '*' }
STATUS_CODES_MAP.each_value { |val| val.gsub!(/\s/, '*') }
STATUS_CODES_MAP.each_value { |val| val.sub!(/\s/, 'Network error ' }