“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
是可选的, 除非你想在一行中写一个if
expression式。 对于跨越多行的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。 if
expression式返回在分支中执行的最后一个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
只有当你想在一行上写if
expression式时才需要:
if val == "hi" then something.meth("hello") else something.meth("right") end
你的例子中的括号并不重要,在这两种情况下都可以跳过它们。
有关详细信息,请参阅镐书 。
根本没有区别。
而且,仅供参考,您的代码可以优化
something.meth( val == 'hi' ? 'hello' : 'right' )