我试图弄清楚为什么以下代码在here-doc字符串eval中不起作用:
script = <<FILE
def i_feel(&block)
block_given? ? "I feel #{ yield } :D" : "I don't know how I feel :/"
end
i_feel
# => "I don't know how I feel :/"
i_feel { 'great' }
# => "I feel great :D"
FILE
puts script
`<main>': no block given (yield) (LocalJumpError)
Run Code Online (Sandbox Code Playgroud)
我知道部分原因是字符串插值.但是我如何让它发挥作用?首先尝试没有here-doc,看看它是否有效?
您可以通过使用以下标识符包围标识符来避免在heredoc中进行插值':
script = <<'FILE'
something with #{interpolation} like syntax.
FILE
puts script
Run Code Online (Sandbox Code Playgroud)
这将只打印出文字something with #{interpolation} like syntax.没有'围绕FILE你可能会得到一个错误(如果interpolation定义你不会).
您还可以使用`(反引号)来执行heredoc的内容:
s = <<`SCRIPT`
echo foo
echo bar
SCRIPT
Run Code Online (Sandbox Code Playgroud)
s现在将包含执行heredoc的结果 - 在本例中为字符串"foo\nbar\n".
| 归档时间: |
|
| 查看次数: |
373 次 |
| 最近记录: |