这实际上是两个问题的组合。
首先是:在这里的文件中有没有办法做数学?
第二:在这里的文档中有没有办法使用格式字符串? 第二个问题的一个例子是:
print <<HERE
%s
HERE
% 'string'
然而这不起作用。
Thankss
答案 0 :(得分:2)
两者都是。默认情况下,heredoc使用#{}
进行插值。您可以在其中放置任何Ruby代码,并对其进行评估。 (为避免插值,您可以执行<<'HERE'
。)对于第二部分,您的语法错误。你应该这样做:
print <<HERE % 'string'
%s
HERE
答案 1 :(得分:1)
回答你的第一个问题。是的,你可以在HERE doc中做数学。您只需使用标准的#{}表达式评估。
<<EOF
This is a
multiline doc
with some math in it.
#{3 *18}
EOF
回答你的第二个问题;你不能以你在HERE文档中的示例中显示的方式进行字符串插值。考虑一下它的评估方式。它更像是在文档结束时立即评估的流。
通常我会在HERE文档之前创建您的其他变量,然后在您的HERE文档中使用标准表达式评估。
如果您想直接在HERE文档中格式化字符串,则需要在@sawa指出时开始。请注意以下示例中我如何以数组方式传递多个字符串。
<<EOF % ['string','string2','string3']
%s
%s
%s
HERE