首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么不在这里-文档工作中阻止参数呢?

为什么不在这里-文档工作中阻止参数呢?
EN

Stack Overflow用户
提问于 2013-09-01 01:08:16
回答 3查看 438关注 0票数 3

我正在试图找出为什么以下代码在here-doc字符串eval中不能工作:

代码语言:javascript
复制
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)

我知道部分原因是字符串插值。但我该怎么做呢?先试一试,不需要这里-看看它是否有效?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-09-02 03:38:57

这是我的答案,更多关于我的目的是什么。你想看看你刚刚运行的是什么,所以这是完整的版本。

代码语言:javascript
复制
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

维克多说得对。这里,医生也包括范围。在这种情况下,它是插值的插值。听起来有点让人困惑,但看看这些括号到了什么程度。还请注意,我们必须转义原始#{ less }less,它尝试计算它。这就是首先引起所有麻烦的原因。希望这能有所帮助。

顺便说一句,这是从lambdas.rb复制过来的

由此可以看出,您不需要&block参数。

票数 0
EN

Stack Overflow用户

发布于 2013-09-01 01:41:05

您可以使用'包围标识符,从而避免在本地文档中进行内插。

代码语言:javascript
复制
script = <<'FILE'
something with #{interpolation} like syntax.
FILE

puts script

这将只打印出文字something with #{interpolation} like syntax.,而不需要FILE周围的',您可能会得到一个错误(如果定义了interpolation,就不会)。

您还可以使用` (backticks)来执行本文档的内容:

代码语言:javascript
复制
s = <<`SCRIPT`
echo foo
echo bar
SCRIPT

s现在将包含执行此文件的结果--在本例中是字符串"foo\nbar\n"

票数 7
EN

Stack Overflow用户

发布于 2013-09-01 01:27:41

我想我刚弄明白了。

代码语言:javascript
复制
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

只需删除字符串内插括号,在这里文档打印它,没有它们很好。我想我忘了把它设为内插。糟了!我会在可能的时候再给你们回电。

也许现在我可以从中得到一些新的东西。至少错误消失了。这样我就不会分心了。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18554285

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档