Ruby ERB结果和ERB运行之间的差异

Ruby ERB结果和ERB运行之间的差异,ruby,erb,Ruby,Erb,这是erb3.rb require 'erb' weekday = Time.now.strftime('%A') simple_template = "Today is <%= weekday %>." renderer = ERB.new(simple_template) puts renderer.result renderer.run 问题1。我知道我不需要编写put渲染器。运行。但是还有什么不同吗 问题2。put renderer.run的输出是今天是星期五。%。最后

这是erb3.rb

require 'erb'

weekday = Time.now.strftime('%A')
simple_template = "Today is <%= weekday %>."

renderer = ERB.new(simple_template)
puts renderer.result
renderer.run
问题1。我知道我不需要编写
put渲染器。运行
。但是还有什么不同吗


问题2。
put renderer.run
的输出是
今天是星期五。%
。最后的百分比是多少。当我使用
put renderer.run
时,它不会输出%。

renderer.run
打印结果,这意味着输出后没有新的换行符,这是由
%
指示的(我猜是因为您使用的是zsh)。您可以得到如下相同的结果:

➜ puts 'a'; print 'a'
a
a%

关于Q1,编写
put renderer.result
renderer.run
之间没有区别。 更新:感谢@muistooshort为
run
指出源代码:

def run(b=new_toplevel)
  print self.result(b)
end
如您所见,它只是打印
结果的输出


关于第二季度,我认为%只是表明了一条新的路线。如果您将脚本更改为以下内容,它将消失

renderer = ERB.new(simple_template)
puts renderer.result
renderer.run
puts ""
#>Today is Thursday.
#>Today is Thursday.

run
实际上就是
print self.result(b)
:因为还没有人明确地说出来,所以值得一提:
put
在输出的末尾添加一个换行,而
print
没有。
renderer = ERB.new(simple_template)
puts renderer.result
renderer.run
puts ""
#>Today is Thursday.
#>Today is Thursday.