Ruby String插值在1.9.3中引发语法错误,但不是2.3.1

0 ruby string-interpolation

很抱歉提前购买大量代码.我担心我可能错过了一些在上下文中显而易见的东西.

  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
Run Code Online (Sandbox Code Playgroud)

有问题的行是"#{item_id}":{

称为"data"的文本块被转换为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版本不是一种选择.

Ama*_*dan 5

这不是问题所在的问题.

{ symbol: value }是一种新的语法,它是一种快捷方式{ :symbol => value }.在第一次迭代中,我认为它不支持{ "symbol": value }自动字符串符号功能.{ "symbol".to_sym => value }如果向后兼容是一个目标,使用旧式.

(如果你知道所有你正在做的就是转换为JSON,你甚至可以把它留下来{ "string" => value },因为JSON没有区分字符串和符号的知识让我感到安慰;但我认为它是代码味道.)