Ruby和File.read
我正在为我的javascripts构建一个构建自动化脚本。 我以前从未使用过Ruby和File.read,ruby,file,Ruby,File,我正在为我的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 |conten
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
但是,它不起作用<代码>@缓冲区始终为空
以下是调试过程:
(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
中,文件.read可以正常工作。但是,如果我将调试器
断点放在文件.read
块中,它就不会进入调试器。这意味着块本身永远不会执行
另外,我检查了文档,没有提到File.read。
我应该放弃它,还是我做错了什么
%w{crypto/sjcl.js miner.js}.each do |filename|
File.open(filename, 'r') do |file|
@buffer << file.read
end
end
%w{crypto/sjcl.js miner.js}。每个do|文件名|
打开(文件名为'r')do |文件|
@bufferFile.read
不接受块,它以字符串形式返回文件内容。您需要执行以下操作:
@buffer += File.read(filename)
调试器显示内容的原因是它打印函数调用的返回值
现在,如果你不介意的话,请提供一些征求意见:
无需执行@buffer
,您只需使用buffer
您可以执行var文件,而不是var+=“string”
。read
不接受块,它将文件内容作为字符串返回。您需要执行以下操作:
@buffer += File.read(filename)
调试器显示内容的原因是它打印函数调用的返回值
现在,如果你不介意的话,请提供一些征求意见:
无需执行@buffer
,您只需使用buffer
您可以使用var+=“string”
,而不是var,因为我喜欢在整个文件中使用类变量,这样它就突出了,我可以看到它的变化。感谢您向我解释File.read的工作原理。我通常使用@JanNetherdrake,你指的是实例变量,可能应该开始将不必要的变量视为代码气味@Dogbert暗示这可能更实用。事实上:File.write('../server/index.html',Uglifier.compile(%w{crypto/sjcl.js miner.js}.map{fn | File.read(fn)}.join))
@dbenhur,是的,这就是我要建议的!)是的,实例变量。这只是我自己的一个小构建脚本,所以我没有重构它。但是我很欣赏这些技巧。谢谢。我喜欢用类变量来表示我在整个文件中使用的东西,只是为了让它脱颖而出,让我看到它在哪里变异。感谢您向我解释File.read的工作原理。我通常使用@JanNetherdrake,你指的是实例变量,可能应该开始将不必要的变量视为代码气味@Dogbert暗示这可能更实用。事实上:File.write('../server/index.html',Uglifier.compile(%w{crypto/sjcl.js miner.js}.map{fn | File.read(fn)}.join))
@dbenhur,是的,这就是我要建议的!)是的,实例变量。这只是我自己的一个小构建脚本,所以我没有重构它。但是我很欣赏这些技巧。非常感谢。