Ruby 为什么不';t块参数在这里的一个文件工作?

Ruby 为什么不';t块参数在这里的一个文件工作?,ruby,Ruby,我试图找出以下代码在here文档字符串评估中不起作用的原因: 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'

我试图找出以下代码在here文档字符串评估中不起作用的原因:

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)
script=“我感觉很棒:D”
文件
放置脚本
`':未给出块(产量)(LocalJumpError)

我知道部分原因是字符串插值。但我如何让它工作呢?先在没有这里文档的情况下尝试一下,看看它是否有效

我想我刚刚明白了

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
script=“我感觉很棒:D”
文件
放置脚本
只要去掉字符串内插括号,doc就可以在没有括号的情况下很好地打印出来。我想我忘了把它设置为插值。哎呀!我会尽快回复你们的

也许现在我可以从中得到一些新的东西。至少错误消失了。
这将停止分散我的注意力。

您可以通过在标识符周围加上
来避免在herdoc中插入:

script = <<'FILE'
something with #{interpolation} like syntax.
FILE

puts script

s
现在将包含执行herdoc的结果–在本例中是字符串
“foo\nbar\n”

以下是答案,以及关于我的预期目的的更多信息。您希望看到刚才运行的内容,因此这是完整的版本

script = <<FILE

def how_i_feel
  block_given? ? "I feel \#{ yield }." : "I don't know how I feel :/." 
end
#{ def how_i_feel
     block_given? ? "I feel #{ yield }." : "I don't know how I feel :/." 
   end }
how_i_feel
#{ how_i_feel }                                  

how_i_feel { 'great :D' }
#{ how_i_feel { 'great :D' } }    

FILE

puts script

script=没有什么可以产生的,它不在方法中。所以范围是错误的。这比我留下的答案要好得多。你教了我一些新东西!请注意,在backticks示例中,您不是在执行Ruby代码,而是在执行shell代码。如果您真的想将任意字符串作为Ruby代码进行求值,您需要使用一种eval方法。谢谢但我已经知道了埃雷多克斯。您也可以这样做:script=您提出的另一个优点是关于eval字符串。那里有适合廉价和肮脏的快餐店,但谁想看呢?这里的医生不是基本上做同样的事情,但更雄辩吗?这是为那些新来这里的医生
script = <<FILE

def how_i_feel
  block_given? ? "I feel \#{ yield }." : "I don't know how I feel :/." 
end
#{ def how_i_feel
     block_given? ? "I feel #{ yield }." : "I don't know how I feel :/." 
   end }
how_i_feel
#{ how_i_feel }                                  

how_i_feel { 'great :D' }
#{ how_i_feel { 'great :D' } }    

FILE

puts script