2014-06-13 21 views
1

考虑以下两个红宝石片段:`begin` block vs括号:只是一个风格问题?

def foo 
    @foo ||= begin 
    get_the_foo 
    end 
end 

VS

def foo 
    @foo ||= (
    get_the_foo 
    ) 
end 

的结果是一样的。就个人而言,我更喜欢第二个,因为begin让我期待异常处理。

这些除了款式还有什么区别吗?例如,性能,范围,内存等?

我的猜测是begin是'重',因为它可以做更多。

+0

我认为,如果有的话,这种差异是可以忽略的。 – sawa

+1

我对两者都进行了基准测试,并获得了相同的结果,所以我猜测它们在内部是一样的。 –

+0

我不会这么做 - 我只是做'@foo || = get_the_foo'。 – sevenseacat

回答

0

虽然我不认为除了style之外,两者之间还是存在显着差异,我想真正的问题应该是“使用多行计算生成内联表达式的返回值是否是一个好主意?”。

Ruby的条件赋值快捷键已经很难读取了。我确信,如果您需要一个以上的步骤才能获得价值,您应该将它们提取到一个方法中,并简单地致电@foo ||= method_to_get_the_foo