File.exist? の引数が nil だった時に nil または false を返す方法

投稿者: Anonymous

File.exist?でファイルの存在確認をするときに引数がnilの可能性があれば

File.exist?(filename) if filename

と書いているのですが、tryに近い形でfilenamenilならnilを返し、StringであればFile.exist?の処理を行う定番の書き方はありますか?

自分でメソッドを定義する必要があるのであれば現在の書き方を維持していこうと思っているのですが
より良い書き方があるなら知りたく質問させていただきました。

active_supportのような使えるメソッドをまとめて読み込む形の物も採用していこうと考えています。

解決

定番の書き方はわかりませんが、

File.exist?(filename.to_s)

とすれば filenamenilでもStringでも存在チェックが実行できます。

> File.exists?(nil)
TypeError: no implicit conversion of nil into String
    from (irb):1:in `exists?'
    from (irb):1
    from /Users/jit/.rbenv/versions/2.2.0/bin/irb:11:in `<main>'
> File.exists?(nil.to_s)
=> false

ちなみにもし、true/false/nilの3種類を区別して返したい、という場合はその背景まで含めないと適切な回答がしにくいです。(何か特殊なことをやろうとしているのかもしれません)

通常はfalse/nilはどちらも偽として扱われるので、わざわざ区別するのはレアケースだと思います。

回答者: Anonymous

Leave a Reply

Your email address will not be published. Required fields are marked *