我有一个方法Embed.toggler
,它接受一个哈希参数。使用以下代码,我试图在哈希中使用heredoc。
Embed.toggler({
title: <<-RUBY
#{entry['time']}
#{entry['group']['who']
#{entry['name']}
RUBY
content: content
})
但是,我收到以下错误跟踪:
syntax error, unexpected ':', expecting tSTRING_DEND
content: content
^
can't find string "RUBY" anywhere before EOF
syntax error, unexpected end-of-input, expecting tSTRING_CONTENT or tSTRING_DBEG or tSTRING_DVAR or tSTRING_END
title: <<-RUBY
^
如何避免出现此错误?
答案 0 :(得分:20)
在<<-RUBY
:
Embed.toggler({
title: <<-RUBY,
#{entry['time']}
#{entry['group']['who']
#{entry['name']}
RUBY
content: content
})
这确实有效。我不知道为什么它不能在我的代码中工作。
它没有用,因为哈希要求键/值对用逗号分隔,例如{title: 'my title', content: 'my content' }
,而你的代码只是没有逗号。由于麻烦的HEREDOC语法,很难看出这一点。
您知道是否有办法对字符串执行操作?
你正在玩火。提取变量并对变量本身进行后处理总是更安全(通常更干净):
title = <<-RUBY
#{entry['time']}
#{entry['group']['who']
#{entry['name']}
RUBY
Embed.toggler(title: title.upcase, content: content)
但是,如果你今天感到危险,你可以在打开HEREDOC字面后添加操作,就像你已经添加了逗号一样:
Embed.toggler({
title: <<-RUBY.upcase,
#{entry['time']}
#{entry['group']['who']
#{entry['name']}
RUBY
content: content
})
但我劝阻你,因为它破坏了可读性。