2012-12-27 20 views
0

我有一個奇怪的問題,我已經實現了一個模塊。我定義了鍵值對的哈希值,然後用星號替換哈希值中的空格。當我嘗試通過在IRB裝載該模塊:修改紅寶石1.8.7模塊中的哈希

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 

在此先感謝

回答

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

有一個語法錯誤在這裏。 )在最後失蹤。

除此之外,在修改散列值時不應該有任何問題。

2

好像你缺少一個)

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

VS

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