Ruby的局部变量范围约定?

时间:2013-02-15 15:26:52

标签: ruby

我有以下代码:

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

  assert_equal(true, condition)
end

在Ruby中,if块内的变量与根据“I don't understand ruby local scope”在if块之外声明的变量具有相同的范围。

通常的做法是在控制结构中初始化变量而不先声明它们或在控制结构之外初始化它们吗?

来自Java.NET背景,这似乎使代码更不易读,更容易出现逻辑错误。

我正在尽力“不在Ruby中编写.NET代码”,但是想要理解为什么上述内容比在范围的开头或控制结构之外声明范围变量更有意义。

1 个答案:

答案 0 :(得分: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'