我有2個問題:1 - 我不明白的事情含義,這個代碼回報:File.open()有沒有區塊有什麼區別?
File.open("a.txt") do |i|
puts i
end
請給我解釋一下。
2 - 並且請解釋我是什麼,代碼之間及以下 碼的區別:
我有2個問題:1 - 我不明白的事情含義,這個代碼回報:File.open()有沒有區塊有什麼區別?
File.open("a.txt") do |i|
puts i
end
請給我解釋一下。
2 - 並且請解釋我是什麼,代碼之間及以下 碼的區別:
File.open("a.txt").each do |i|
puts i
end
感謝附:
File.open("some_file.txt") do |file|
puts file.read
end
open方法調用與塊一個文件實例,並清理文件引用一旦你的塊返回,關閉和沖洗FIL因此您的應用程序不會泄漏文件處理程序,這非常棒,因爲我們通常會忘記關閉文件,或者不考慮文件處理可能會產生異常。
當你做這樣的:
file = File.open("some_file.txt")
puts file.read
open方法使您文件實例,但現在你是負責清理殘局和關閉文件時,你不需要它了。所以,如果你這樣做,你應該將文件設置爲開始/救援塊,並添加一個確保子句,如果出現任何錯誤,請關閉該文件。
除非你有一個非常特殊的需求,你不應該使用這個第二個版本,第一個版本更簡單,更安全,你不必在意關閉/清理你對文件什麼的。
您一般可以在控制檯中輸入如此簡單的內容並立即獲得答案。
因此與內容的文件a.txt中:
one
two
three
您的代碼將做到這一點:
[[email protected]]$ irb
ruby-1.9.2-p180 :007 > File.open("a.txt") do |i|
ruby-1.9.2-p180 :008 > puts "a.txt:"+i.to_s
ruby-1.9.2-p180 :009?> end
a.txt:#<File:0x000001010e7ae8>
=> nil
ruby-1.9.2-p180 :010 > File.open("a.txt").each do |i|
ruby-1.9.2-p180 :011 > puts "a.txt:"+i.to_s
ruby-1.9.2-p180 :012?> end
a.txt:one
a.txt:two
a.txt:three
=> #<File:a.txt>
所以第一個打印文件對象引用/地址。
通過文件中的行並打印每一個的第二一個迭代。
希望幫助
您忘記關閉文件在你的第二個例子:d – fl00r
是的,那就是意圖:d –