【发布时间】:2015-02-19 10:59:18
【问题描述】:
对于我的一生,我无法弄清楚为什么这不能按预期工作。
代码:
require 'erb'
def say_hello(name)
"Nice to see you, #{ name }!"
end
def greetings
template = <<-TEMPLATE
Hello!
<%= yield %>
Goodbye!
TEMPLATE
ERB.new(template).result(binding)
end
people = ['Aaron', 'Bob', 'Tim', 'Juan']
t = greetings do
people.each do |p|
say_hello(p)
end
end
puts t
(有点做作,我知道,但它会起到作用。)
我的期望:
Hello!
Nice to see you, Aaron!
Nice to see you, Bob!
Nice to see you, Tim!
Nice to see you, Juan!
Goodbye!
我得到了什么:
Hello!
['Aaron', 'Bob', 'Tim', 'Juan']
Goodbye!
想法:
我猜这是因为内部块(以people.each 开头)在块执行之前被强制转换为字符串。也许 ERB 不喜欢我尝试将新的构造文本块注入其模板的方式。
这是怎么回事?
【问题讨论】: