如何访问数据后的'__END__'块?
In Ruby, the __END__
关键字用于告诉解析器停止执行源文件. 它通常用于存储不需要内联的代码片段和关于脚本的注释, 以及将诸如许可证文件之类的文档附加到源代码文件的末尾.
后文件的内容 __END__
关键字可通过名为 DATA
. 它包含了之后的所有内容 __END__
在那个Ruby脚本文件中.
How can this be useful? Let’s try it out. 在下面的示例中,我将在需要处理文本数据的快速脚本中使用它, rather than piping to STDIN
.
DATA.each_line.map(&:chomp).each do |url|
`open "#{url}"`
end
__END__
http://1imq.1e1v.com/
1imq.1e1v.com/ruby/tips-and-practices
Not that useful? Ok, 假设你有一堆CSV数据,你只需要其中的一列, 你想要使用CSV数据 DATA
拉出你想要的字段:
require "csv"
CSV.解析(DATA, headers: true).each do |row|
puts "#{row['Name']} => #{row['URL']}"
end
__END__
Id,Name,URL
1,Eqbal,http://1imq.1e1v.com/resume/eqbal-quran
2,迭戈,http://http: / / 1imq.1e1v.com/resume/diego-ballona
This is pretty cool. Still don’t believe me? 考虑最后一个例子. 假设你只想使用DATA来包含ERB模板:
require 'erb'
number = rand(100)
erb = ERB.new(DATA.read)
puts erb.result()
__END__
Here is a randon number: <%= number %>.