簡體   English   中英

Ruby和File.read

[英]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..."

如您所見,在irbFile.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顯示內容的原因是因為它打印了函數調用的返回值。

現在,如果您不介意,請教一些建議:

  1. 無需執行@buffer ,您只需使用buffer
  2. 除了var += "string" ,您還可以執行var << string +創建一個新的String對象,而<<就地對其進行修改,因此更加快捷高效。 無論如何,您都可以通過+=對其進行變異,因此<<將執行相同的操作。
  3. 取而代之的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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM