-1

次のコードがあります。

def test_compare()
  if true
    condition = true
  else
    condition = false
  end

  assert_equal(true, condition)
end

Ruby では、 「 ruby​​ のローカル スコープがわかりません」に従ってif、ブロック内の変数はブロック外で宣言された変数と同じスコープを持ちます。if

最初に変数を宣言したり、制御構造の外で初期化したりせずに、制御構造内で変数を初期化するのは一般的な方法ですか?

Java.NET のバックグラウンドから来ると、これによりコードが読みにくくなり、ロジックの誤りが発生しやすくなります。

私は「Ruby で .NET コードを書かない」ように最善を尽くしていますが、スコープの先頭または制御構造の外側でスコープ変数を宣言するよりも上記のほうが理にかなっている理由を理解したいと考えています。

4

1 に答える 1

3

if値を返します。この動作を使用する方がクリーンです。

x = if condition
  # several lines of calculations can be here
  'true value'
else
  # several lines of calculations can be here
  'false value'
end

または、この具体的なケースでは、三項演算子を使用することをお勧めします。同じことを行い、より短いです。

x = condition ? 'true value' : 'false value'
于 2013-02-15T15:31:01.730 に答える