what?
代码、文本根据模版生成的方法选择的考虑
who?
需要使用模版技术处理文本信息的兄弟
where?
写网页模版、邮件模版、测试代码模版等
why?
为什么写这篇文章?
前些日子在工作中遇到了一个效率问题,需要根据不同的业务动态生成一段测试套的业务部署代码。当时的第一反应是肯定需要不同的业务写一个配置模版文件。进而想到使用xml这种万能数据方法来实现。
生成代码和生成以文本为主的可能还不一样。因为每一行要生成的代码都是一个根据动态数据可变的单元。模版的部分只是用来排版。如:
def cmd1
xxx
end
def cmd2
end
def cmd3
end
tstsuite = %Q{
#{cmd1}
#{cmd2}
#{cmd3}
}
但,总感觉这不是一个最好的解决方法,参考了erb的模版使用方法后,觉得应该写点东西整理一下这个问题——在文本中拼代码还是在代码中拼文本
when?
什么时候使用模版(在文本中拼代码)?什么时候使用字符串就可以了(在代码中拼文本)。
当要打印货生成的信息较少时,如静态字符和动态的变量都较少时,使用字符串就可以搞定了。
一个打印名字的小例子:
def say_hello_to name
puts "hello! my friend,#{name}"
end
但是如果要打印或生成一大段文本。文本中有不止一处的动态信息,而且可能要插入写简单判断、循环的代码时,适合使用模版。如jsp、rhtml等都是模版技术。
一个email的小例子(来自erb的注释)
require "erb"
# Create template.
template = %q{
From: James Edward Gray II <james@grayproductions.net>
To: <%= to %>
Subject: Addressing Needs
<%= to[/\w+/] %>:
Just wanted to send a quick note assuring that your needs are being
addressed.
I want you to know that my team will keep working on the issues,
especially:
<%# ignore numerous minor requests -- focus on priorities %>
<% priorities.each do |priority| %>
* <%= priority %>
<% end %>
Thanks for your patience.
James Edward Gray II
}.gsub(/^ /, '')#去掉开头的空格
message = ERB.new(template, 0, "%<>")
# Set up template data.
to = "Community Spokesman <spokesman@ruby_community.org>"
priorities = [ "Run Ruby Quiz",
"Document Modules",
"Answer Questions on Ruby Talk" ]
# Produce result.
email = message.result
puts email
how to?
erb是个不错的选择
how much?(收获)
不用重新发明轮子就享受车子带来的快乐。
how many?(需要了解哪些)
简单的erb语法和可以解决日常中的大部分问题。