我实施的模块存在一个奇怪的问题。我定义了一个键值对的哈希值,然后用星号替换哈希值中的空格。当我尝试通过以下方式在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
提前致谢
答案 0 :(得分:2)
好像你错过了)
:
STATUS_CODES_MAP.each_value { |val| val.gsub!(/\s/, '*' }
VS
STATUS_CODES_MAP.each_value { |val| val.gsub!(/\s/, '*') }
答案 1 :(得分:2)
STATUS_CODES_MAP.each_value { |val| val.sub!(/\s/, 'Network error ' }
此处存在语法错误。 )最后遗失了。
除此之外,修改哈希值应该没有任何问题。