私は2つの質問があります: 1 - 私はこのコードの復帰、という事の意味を理解していない:私に説明してくださいブロックの有無によるFile.open()の違いは何ですか?
File.open("a.txt") do |i|
puts i
end
。
2 - とそのコードの間と コード以下の違いは何である私に説明してください:付き
File.open("a.txt").each do |i|
puts i
end
おかげ
私は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
をオープンする方法は、とあなたのブロックを呼び出しますa ファイルインスタンスを開き、ブロックが戻るとファイル参照をクリーンアップし、ファイルを閉じてフラッシュしますアプリケーションがファイルハンドラをリークすることはありません。通常、ファイルを閉じるのを忘れてしまったり、ファイル処理が例外を引き起こす可能性があることを考慮していません。
あなたはこのようにそれを行うと:
file = File.open("some_file.txt")
puts file.read
openメソッドはあなたにファイルインスタンスが作成されますが、今あなたが混乱をクリーンアップして、あなたはもうそれを必要としないときに、ファイルを閉じるための責任があります。したがって、このようにしている場合は、ファイルをbegin/rescueブロックに設定し、何か問題が生じた場合にファイルを閉じるための確実な句を追加する必要があります。
特に必要がない限り、この2番目のバージョンは使用しないでください。最初のバージョンはよりシンプルで安全です。ファイルに行ったことをすべてクローズ/クリーンアップする必要はありません。
通常、コンソールにこのような簡単なものを入力して、すぐに回答を得ることができます。
ので、内容のファイルを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>
だから、最初のものはFileオブジェクトの参照/アドレスを出力します。
2番目のファイルは、ファイル内の行を繰り返し処理し、それぞれを出力します。
あなたはあなたの第二の例では、ファイルを閉じることを忘れ役立ちます
希望:D – fl00r
うん、それは意図です:D –