【问题标题】:Why does `String.interpolate` behave differently depending on the sequence?为什么 `String.interpolate` 的行为会因序列而异?
【发布时间】:2016-05-02 12:17:48
【问题描述】:

使用以下代码,我希望看到'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'] 失败;第二次,它起作用了。

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

【问题讨论】:

  • 核心 Ruby 中没有这样的方法。如果您正在使用特定的库/框架/脚本,请这样写。

标签: ruby quotes


【解决方案1】:

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

【讨论】:

  • 用于测试的 Hm 撇号是用户输入,因此使用从设备发送的格式。看来我可能需要更改所有撇号。
猜你喜欢
  • 2019-04-04
  • 2010-11-18
  • 1970-01-01
  • 1970-01-01
  • 2021-08-23
  • 2011-09-11
  • 2010-11-29
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多