2

trueの場合は「はい」、 の場合は「いいえ」false、または の場合は「NA」 (または実際には他の文字列)を返す何かを書きたいことがよくありnilます。現在、私はこれを行います:

@contact.boolean ? 'Yes' : (@contact.boolean.nil? ? "NA" : "No")

これはこれを書くための最短の方法ですか?

4

4 に答える 4

9

ここに1つのアイデアがあります:

> {true => "Yes", false => "No", nil => "N/A"}[true]
 => "Yes" 

だから、もちろん、あなたはそうするでしょう{true => "Yes", false => "No", nil => "N/A"}[value]

于 2012-10-04T00:02:32.677 に答える
0

かなり。2 つの異なる値を返す演算子を使用して 3 つの異なる値を返そうとしているため、二重の ternery が必要です。

オブジェクトに true または false を格納する必要がありますか? 「はい」または「いいえ」を保存できませんか?もしそうなら、そしてあなたのプロパティがブール値よりも良いものと呼ばれると仮定すると、あなたは単純に書くことができます

@contact.correct? || "(NA)"
于 2012-10-04T00:02:59.833 に答える
0

3 項式の true/false テストを 1 回通過すると、読むときに理解しにくくなります。それはメンテナンスの問題につながります。caseステートメントに移動することをお勧めします。

case @contact
when true
  'Yes'
when false
  'No'
when nil
  '(NA)'
end

他の言語では、連鎖した 3 項ステートメントが読みやすくなります。Perl では複雑なチェーンが使用されます。これは、何が起こっているのかを簡単に確認できる方法で簡単に構築できるためです。これを書く代わりに:

$contact == true ? 'Yes' : contact == false ? 'No' : '(NA)';

あなたはそれを書くことができます:

$contact == true       ? 'Yes'
    : contact == false ? 'No'
    :                    '(NA)';

これは、コードを読んでいる人にとって、ロジックに関する視覚的なヒントです。

于 2012-10-04T04:46:27.790 に答える
0

それをメソッドに移動するのはどうですか?なぜ短くする必要があるのですか?それをメソッドに移動すると、それを呼び出すだけで済みます。

于 2012-10-04T00:02:38.347 に答える