我正在为我的 javascripts 构建一个构建自动化脚本。我以前从未使用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
工作正常。但是,如果我debugger
在块中放置断点File.read
,它永远不会中断调试器。这意味着块本身永远不会被执行?
另外,我检查了文档,并且没有提到 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