浅析Ruby中的DATA对象
这段代码能运行吗? 这个DATA是什么东西?
require 'erb'
data = DATA.read
max = 15_000
title = "hello world!"
content = "hello world!\n" * 10
max.times{
ERB.new(data).result(binding)
}
__END__
<html>
<head> <%= title %> </head>
<body>
<h1> <%= title %> </h1>
<p>
<%= content %>
</p>
</body>
</html>
这个神奇的DATA是一个IO对象,读取<font face="NSimsun">__END__</font>
之后内容。 有一点需要注意的是<font face="NSimsun">DATA.read</font>
会将<font face="NSimsun">__END__</font>
之后的内容一次性读出,由于IO读取的特性,当第 二次<font face="NSimsun">DATA.read</font>
的时候内容就会为空,如果需要第二次读取,那么先要执行<font face="NSimsun">DATA.rewind</font>
。
有的时候我们写一个脚本来做一些自动化的工作,需要预先读取一个文件的内容,作为输入或者作为模版,我们可以先把这部分内容附到<font face="NSimsun">__END__</font>
后,然后用<font face="NSimsun">DATA</font>
来读取,因为它是标准的IO对象,我们可以像处理普通文件一样处理<font face="NSimsun">__END__</font>
后的内容,如上面的代码所示,用来存储<font face="NSimsun">ERB</font>
内容作为模版,然后再进行处理,非常的方便。
相关推荐
IT之家 2020-03-11
graseed 2020-10-28
zbkyumlei 2020-10-12
SXIAOYI 2020-09-16
jinhao 2020-09-07
impress 2020-08-26
liuqipao 2020-07-07
淡风wisdon大大 2020-06-06
yoohsummer 2020-06-01
chenjia00 2020-05-29
baike 2020-05-19
扭来不叫牛奶 2020-05-08
hxmilyy 2020-05-11
黎豆子 2020-05-07
xiongweiwei00 2020-04-29
Cypress 2020-04-25
冰蝶 2020-04-20