2016-06-14 3 views
0

大量のコードが残っています。私は文脈の中で明白な何かを逃したかもしれないと心配しています。Rubyの文字列補間は、1.9.3では構文エラーをスローしますが、2.3.1ではありません

def remove_runbook_items(runbook_id, runbook_item_id) 
    item_id = runbook_item_id.to_s 
    method = 'POST' 
    url = @the_endpoint 
    data = { 
     invokeDetail: { 
      process: 'remove_runbook_items', 
      parameters: { 
       runbook_id: runbook_id, 
       runbook_items: { 
        "#{item_id}": { 
         cores: options[:cores], 
         ram: options[:ram], 
         rank: options[:rank], 
         wait_time: options[:wait_time] 
        } 
       } 
      } 
     } 
    } 
    data.merge! @common_data 
    result = send_request(method, url, data.to_json) 
    result['resultDetail'] # Returns contents of response from REST API server 
    end 

問題のラインは言うものである「#{ITEM_ID}」:{

「データ」JSONに変換されると呼ばれるテキストのブロック、私は補間しなければなりません文字列 "item_id"でなければ、結果的にitem_idの内容ではなく、 "item_id"を文字通り吐き出します。実際には、補間なしでコンテンツを取得する方法があれば、それを知りたいです。

このようにして文字列を補間すると、Ruby 2.3.1ではうまく動作します。しかし、私はRubyの1.9.3を使用しているマシン上で同じコードを実行しようとすると、私は構文エラーの連祷はどこにでも、私はこのような文字列を補間している取得:

/home/mydir/mydir/mydir/mydir/mydir/restapi_helper.rb:1122: syntax error, unexpected ':', expecting tASSOC 
        "#{device_id}": { 
           ^
/home/mydir/mydir/mydir/mydir/mydir/restapi_helper.rb:1128: syntax error, unexpected '}', expecting keyword_end 
/home/mydir/mydir/mydir/mydir/mydir/restapi_helper.rb:1163: syntax error, unexpected ':', expecting tASSOC 
        "#{item_id}": { 
           ^
/home/mydir/mydir/mydir/mydir/mydir/restapi_helper.rb:1169: syntax error, unexpected '}', expecting keyword_end 
/home/mydir/mydir/mydir/mydir/mydir/restapi_helper.rb:1257: syntax error, unexpected ':', expecting tASSOC 
        "#{item_id}": { 
           ^
/home/mydir/mydir/mydir/mydir/mydir/restapi_helper.rb:1263: syntax error, unexpected '}', expecting keyword_end (SyntaxError)

を誰もが何かアドバイスはありますか?テストマシンでRubyのバージョンをアップグレードすることは、残念なことにオプションではありません。

答えて

5

これは問題である反復ではありません。

{ symbol: value }は、新しい構文です。{ :symbol => value }のショートカットです。最初の反復では、私はそれが{ "symbol": value }自動文字列記号化機能をサポートしているとは思わない。下位互換性が目的の場合は、旧式の{ "symbol".to_sym => value }を使用してください。

(あなたがやっているすべては、JSONに変換されていることをを知っ場合、あなたもちょうどJSONが文字列と記号の区別をしないという知識で慰め、{ "string" => value }としてそれを残すことができます。しかし、私は思います

+0

'{:"シンボル ":値}"は1.9でも動作するはずです(文字列内の先頭のコロンに注意してください)。 – mudasobwa

+1

@mudasobwa '{:" symbol "=> value} '? –

+0

@Jordan Oh、はい、本当に '{:" symbol "=> value}'、物事を混乱させて申し訳ありません。 – mudasobwa

関連する問題