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


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

[code]

    File.exist?(filename) if filename
    
[/code]

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

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

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




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

[code]

    File.exist?(filename.to_s)
    
[/code]

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

[code]

    > 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
    
[/code]

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

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




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

[code]

    File.exist?(filename.to_s)
    
[/code]

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

[code]

    > 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
    
[/code]

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

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

