2013-02-15 56 views
-1

我有以下代码: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代码”,但想要理解为什么上述内容比在作用域开头或控制结构之外声明作用域变量更有意义。

回答

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'