我只想使用heredoc作为哈希文字中的值。如果heredoc是最后一个元素,它可以正常工作:
{
foo: 123,
bar: <<-HEREDOC
a longer text
HEREDOC
}
#=> {:foo=>123, :bar=>" a longer text\n"}
我找不到在 heredoc之后添加另一个键值对的方法。或者,更具体地说,我找不到插入分隔逗号的方法而不会导致语法错误:
{
foo: 123,
bar: <<-HEREDOC
a longer text
HEREDOC
# <- causes a syntax error because a comma is missing here, but where to put it?
baz: 456
}
答案 0 :(得分:5)
这似乎有效
{
foo: 123,
bar: <<-HEREDOC,
a longer text
HEREDOC
baz: 456
}
答案 1 :(得分:1)
Ursus' answer现场点亮。 为什么这个有效的原因是heredoc不会在开始标识符之后立即开始,而是在跟随开头标识符的行上。开头标识符(在同一行)之后的所有内容都照常解析。
这不仅允许您将{ foo: 123, bar: <<-HEREDOC, baz: 456 }
a longer text
HEREDOC
#=> {:foo=>123, :bar=>" a longer text\n", :baz=>456}
放在~
之后,它还允许您在一行中定义整个哈希:
-
您还可以传递两个heredoc :(使用{ foo: 123, bar: <<~BAR, baz: <<~BAZ }
bar's value
BAR
baz's value
BAZ
#=> {:foo=>123, :bar=>"bar's value\n", :baz=>"baz's value\n"}
代替expected_result = <<-EXPECTED.chomp
One plus one is #{1 + 1}
EXPECTED
条纹空格)
puts(<<-ONE, <<-TWO)
content for heredoc one
ONE
content for
heredoc two
TWO
Ruby的heredoc documentation包含类似的例子,但不幸的是RDoc并没有把它弄好,所以它们经常被忽视:
要在heredoc上调用方法,请将其放在开头标识符之后:
{{1}}您可以在同一行上打开多个heredoc,但这可以 难以理解:
{{1}}