“if”语句与“then”最后的区别是什么?

这两个Ruby if语句之间的区别是什么?

 if(val == "hi") then something.meth("hello") else something.meth("right") end 

 if(val == "hi") something.meth("hello") else something.meth("right") end 

then是一个分隔符来帮助Ruby识别条件和expression式的真实部分。

if条件是真的 – 部分假的部分end

then是可选的, 除非你想在一行中写一个ifexpression式。 对于跨越多行的if-else-end,新行充当分隔符以将条件从真实部分分离

 # can't use newline as delimiter, need keywords puts if (val == 1) then '1' else 'Not 1' end # can use newline as delimiter puts if (val == 1) '1' else 'Not 1' end 

下面是一个与你的问题没有直接关系的快速提示:在Ruby中,没有if语句这样的事情。 事实上,在Ruby中,根本没有任何声明。 一切都是一种expression。 ifexpression式返回在分支中执行的最后一个expression式的值。

所以,没有必要写

 if condition foo(something) else foo(something_else) end 

这最好写成

 foo( if condition something else something_else end ) 

或作为一个class轮

 foo(if condition then something else something_else end) 

在你的例子中:

 something.meth(if val == 'hi' then 'hello' else 'right' end) 

注意:Ruby也有一个三元运算符( condition ? then_branch : else_branch ),但这是完全不必要的,应该避免。 C语言中需要三元运算符的唯一原因是C中if是一个语句,因此不能返回值。 您需要三元运算符,因为它是一个expression式,并且是从条件返回值的唯一方法。 但在Ruby中, if已经是一个expression式,那么实际上不需要三元运算符。

then只有当你想在一行上写ifexpression式时才需要:

 if val == "hi" then something.meth("hello") else something.meth("right") end 

你的例子中的括号并不重要,在这两种情况下都可以跳过它们。

有关详细信息,请参阅镐书 。

根本没有区别。

而且,仅供参考,您的代码可以优化

 something.meth( val == 'hi' ? 'hello' : 'right' )