アプリ版:「スタンプのみでお礼する」機能のリリースについて

最近Rubyの勉強をしているのですが
File.truncate("test.txt",0)

File.open ("test.txt","w") {|file| file.truncate(0)}
この2つが同じ動作をしているのですが、ファイルをopen,closeするときとしないときの違いは何でしょうか?どなたか教えて頂けると恐縮です。

A 回答 (2件)

前者はFileクラスのクラス(特異)メソッドであるtruncateを実行しています。



後者はFileクラスのクラスメソッドOpenを実行した結果、Openした(無い場合は新規作成した)ファイルのFieオブジェクトをブロック{ }に引数として渡し
ブロック内では、渡されたFileオブジェクトのインスタンスメソッドとしてのtruncateを実行しています。

ですから、同じtruncateでもメソッドの種類が違うことになります。

また、前者は、truncateするだけですが、
後者は、ブロック内にFileオブジェクトに対しての他の処理も併せて記述することが可能ですね。


参考:Fileクラス - Ruby 2.6.0 リファレンスマニュアル
https://docs.ruby-lang.org/ja/2.6.0/class/File.h …
    • good
    • 0
この回答へのお礼

ご回答ありがとうございました!

お礼日時:2019/10/09 18:59

File.truncate("test.txt",0)の場合は、test.txtが存在しないとエラーになります。



File.open ("test.txt","w") {|file| file.truncate(0)}の場合は、test.txtが存在しても、しなくても、
空のtext.txtが作成されます。
    • good
    • 0
この回答へのお礼

ご回答ありがとうございました!

お礼日時:2019/10/09 18:59

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!