[英]Ruby and File.read
我正在為我的JavaScript構建構建自動化腳本。 我以前從未使用過File.read
,但是我決定嘗試一下,因為它節省了一行代碼。
所以這是我的代碼:
require "uglifier"
require "debugger"
@buffer = ""
# read contents of javscripts
%w{crypto/sjcl.js miner.js}.each do |filename|
debugger
File.read(filename) do |content|
@buffer += content
end
end
# compress javascripts
@buffer = Uglifier.compile(@buffer)
# TODO insert js in html
# build the html file
File.open("../server/index.html", "w") do |file|
file.write @buffer
end
但是,它不起作用。 @buffer
始終為空。
這是調試過程:
(rdb:1) pp filename
"crypto/sjcl.js"
(rdb:1) l
[4, 13] in build_script.rb
4 @buffer = ""
5
6 # read contents of javscripts
7 %w{crypto/sjcl.js miner.js}.each do |filename|
8 debugger
=> 9 File.read(filename) do |content|
10 @buffer += content
11 end
12 end
13
(rdb:1) irb
2.0.0-p0 :001 > File.read(filename){ |c| p c }
=> "...very long javascript file content here..."
如您所見,在irb
, File.read
可以正常工作。 但是,如果我在File.read
塊中放置debugger
斷點,則它永遠不會進入調試器。 這意味着該塊本身從未執行過?
另外,我已經檢查了文檔,而File.read卻無處提及。 http://ruby-doc.org/core-2.0/File.html
我應該拋棄它,還是做錯什么?
%w{crypto/sjcl.js miner.js}.each do |filename|
File.open(filename, 'r') do |file|
@buffer << file.read
end
end
這樣很好。 但是我仍然很好奇File.read
什么
File.read
不接受塊,它以String形式返回文件的內容。 您需要做:
@buffer += File.read(filename)
debugger
顯示內容的原因是因為它打印了函數調用的返回值。
現在,如果您不介意,請教一些建議:
@buffer
,您只需使用buffer
var += "string"
,您還可以執行var << string
。 +
創建一個新的String對象,而<<
就地對其進行修改,因此更加快捷高效。 無論如何,您都可以通過+=
對其進行變異,因此<<
將執行相同的操作。 File.open
然后file.write
,你可以做File.write
直接,如果使用Ruby 2.0。 您的最終代碼變為(未試用):
require "uglifier"
require "debugger"
buffer = ""
# read contents of javscripts
%w{crypto/sjcl.js miner.js}.each do |filename|
buffer << File.read(filename)
end
# compress javascripts
buffer = Uglifier.compile(buffer)
# TODO insert js in html
# build the html file
File.write("../server/index.html", buffer)
如果您想使其更具功能性,我還有更多建議,如果需要的話請發表評論。 :)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.