为什么`String.interpolate`的行为会有所不同,具体取决于序列?

时间:2016-01-26 00:56:05

标签: ruby quotes

使用以下代码,我希望看到'test-keyword',但我不会:

line_item = "\#{item[‘value’][‘keyword’]}"
item['value'] # => {..., "keyword"=>"test-keyword", ...}
String.interpolate {line_item} # => NameError: undefined local variable or method `‘value’'

但是,如果我更改line_item的值,插值,然后更改回来,我会得到不同的结果:

line_item = "\#{item['value']}"
String.interpolate {line_item}
# => "{\"bot_client_id\"=>\"aiaas-1409611358153-user-0012\", \"recurring\"=>true, \"recurring_natural_language\"=>\"every day\", \"time_string\"=>\"9:16am\", \"ti_Angeles\", \"via\"=>\"sms\", \"keyword\"=>\"test-keyword\", \"status\"=>\"active\", \"created_time\"=>1453620894000, \"process\"=>\"unstarted\"}"

在上文中,interpolate只需更改line_item即可成功运作。然而,

line_item = "\#{item['value']['keyword']}"
String.interpolate {line_item} # => "test-keyword"

现在它有效。在第一遍中,item['value']['keyword']失败;第二次,它有效。

我的预期行为是让它第二次运行,但我一直在使用未定义的局部变量。我需要做什么?

1 个答案:

答案 0 :(得分:0)

中的引号"\#{item[‘value’][‘keyword’]}"更改为'