0

以下は、特定のディレクトリをチェックし、存在しない場合は作成する Ruby 関数の一部です。

if Dir.exists?(dir_name) == false
  Dir.mkdir(dir_name)
end

まったく同じことを行うより短い方法があることを理解しています:

Dir.exists?(dir_name) ? return : Dir.mkdir(dir_name)

しかし、私はこれを完全に理解することはできません。2 番目のコマンドの重要な部分は? return :. コマンドの最初の部分にはチェックするパラメーターがあり、最後の部分には実行するアクションがありますが、意味がわかりません? return :dir_name コマンドの最後の部分のアクションが既に存在する場合にのみ実行されるようにするには、? の代わりに何を使用し? return :ますか?

4

2 に答える 2

3

使用する必要があります

Dir.mkdir(dir_name) unless Dir.exists?(dir_name)

unless <statement>と同じif !<statement>です。ブール値を別のブール値と比較するステートメントを作成しないでください。

たとえば、最初のステートメントの読みやすさを向上させる

if Dir.exists?(dir_name) == false

if !Dir.exists?(dir_name)

unless Dir.exists?(dir_name)

Dir.exists?(dir_name) ? return : Dir.mkdir(dir_name)三項演算子を使用します。

returnすぐに関数を終了し、通常は次のような値を返しreturn "some value"ますが、単に呼び出しreturnて関数を終了して返すこともできますnil

簡単に言えば、dir が存在する場合、3 値バージョンは関数を壊すため、関数内でそれ以降は何も起こりません。したがって、同等のものは実際には

Dir.exists?(dir_name) ? nil : Dir.mkdir(dir_name)
于 2013-02-23T22:22:49.750 に答える
2

これは、if-else を記述する別の方法です。

Condition ? IfTrue : IfFalse

そう、

Dir.exists?(dir_name) ? return : Dir.mkdir(dir_name)

以下と同じです:

if Dir.exists?(dir_name)
    return
else
    Dir.mkdir(dir_name)
end
于 2013-02-23T22:23:45.690 に答える