0

実装したモジュールに奇妙な問題があります。キーと値のペアのハッシュを定義してから、ハッシュ値の空白をアスタリスクに置き換えます。このモジュールを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

前もって感謝します

4

2 に答える 2

2

あなたが行方不明になっているようです)

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

vs

STATUS_CODES_MAP.each_value { |val| val.gsub!(/\s/, '*') }
于 2012-12-27T12:27:32.310 に答える
2
STATUS_CODES_MAP.each_value { |val| val.sub!(/\s/, 'Network error ' }

ここに構文エラーがあります。)最後にありません。

それを除けば、ハッシュ値の変更に問題はないはずです。

于 2012-12-27T12:29:02.440 に答える