淺析Ruby中的DATA對象
這段代碼能運(yùn)行嗎? 這個(gè)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>
這個(gè)神奇的DATA是一個(gè)IO對象,讀取__END__之后內(nèi)容。 有一點(diǎn)需要注意的是DATA.read會將__END__之后的內(nèi)容一次性讀出,由于IO讀取的特性,當(dāng)?shù)?二次DATA.read的時(shí)候內(nèi)容就會為空,如果需要第二次讀取,那么先要執(zhí)行DATA.rewind。
有的時(shí)候我們寫一個(gè)腳本來做一些自動化的工作,需要預(yù)先讀取一個(gè)文件的內(nèi)容,作為輸入或者作為模版,我們可以先把這部分內(nèi)容附到__END__后,然后用DATA來讀取,因?yàn)樗菢?biāo)準(zhǔn)的IO對象,我們可以像處理普通文件一樣處理__END__后的內(nèi)容,如上面的代碼所示,用來存儲ERB內(nèi)容作為模版,然后再進(jìn)行處理,非常的方便。
相關(guān)文章
在Ruby on Rails上使用Redis Store的方法
這篇文章主要介紹了在Ruby on Rails上使用Redis Store的方法,是Ruby程序和Redis數(shù)據(jù)庫結(jié)合的有效途徑,需要的朋友可以參考下2015-06-06
Windows下Ruby on Rails開發(fā)環(huán)境安裝配置圖文教程
這篇文章主要介紹了Windows下Ruby on Rails開發(fā)環(huán)境安裝配置圖文教程,ROR初學(xué)者必看,需要的朋友可以參考下2014-07-07
Ruby中用線程實(shí)現(xiàn)經(jīng)典的生產(chǎn)者消費(fèi)者問題代碼實(shí)例
這篇文章主要介紹了Ruby中用線程實(shí)現(xiàn)經(jīng)典的生產(chǎn)者消費(fèi)者問題代碼實(shí)例,本文直接給出實(shí)現(xiàn)代碼和運(yùn)行效果,需要的朋友可以參考下2015-01-01
解析proxy代理模式在Ruby設(shè)計(jì)模式開發(fā)中的運(yùn)用
這篇文章主要介紹了proxy代理模式在Ruby設(shè)計(jì)模式開發(fā)中的運(yùn)用,通過代理模式以客戶透明的形式可以動態(tài)地為目標(biāo)對象加以行為控制,需要的朋友可以參考下2016-04-04
Rails中使用MySQL分區(qū)表一個(gè)提升性能的方法
這篇文章主要介紹了Rails中使用MySQL分區(qū)表一個(gè)提升性能的方法,本文總結(jié)出了一個(gè)簡單的方法實(shí)現(xiàn)避免掃描全部的分區(qū)表,從而提升性能,需要的朋友可以參考下2015-03-03
關(guān)于Ruby on Rails視圖編寫的一些建議
這篇文章主要介紹了關(guān)于Ruby on Rails視圖編寫的一些建議,有助于團(tuán)隊(duì)協(xié)作時(shí)對代碼的調(diào)試工作,需要的朋友可以參考下2015-08-08

