如何在Ruby中不使用'then'或'end'来编写'if'

时间:2009-03-10 16:42:35

标签: ruby syntax conditional-statements

我发现了三种在Ruby中编写相同条件的方法:

#1
if 1==1 
  puts "true" 
end

#2
puts "true" if 1==1

#3
if 1==1  then puts "true" end

为什么我不能这样做?

#4
if 1==1 puts "true"

我不明白:

  1. 为什么#3中需要然后结束
  2. 为什么我需要更改顺序才能让#2工作。
  3. 声明#4似乎是最自然的写作方式。我不明白为什么不可能。

3 个答案:

答案 0 :(得分:19)

if x then y end”语法适用于多行条件,而“y if x”表单适用于简洁的单行条件语句。 then在第一种情况下是必要的,告诉Ruby条件已经结束(因为Ruby不需要像C这样的parens),并且end是必要的,告诉Ruby整个{{1}块结束(因为它可以是多行)。

您可以用分号替换if,因为行尾也表示条件结束。您无法使用多行then删除end。如果你想要一个简洁的单行,可以使用第二种形式或三元运算符。

例如,假设

if

以下将评估为true,并返回y

x = true

同样,这将评估false并且不返回任何内容

x ? y :
=> y

在else案例

的':'之后添加一个术语
!x ? y :
=> 

答案 1 :(得分:4)

事实上,两种方式实际上都是一种自然的思考方式:

如果这是真的那就做点什么

如果这是真的那就做点什么

请参阅? Ruby试图以这种方式接近英语语法。 end 只是结束块所必需的,而在第二个版本中,块已经用 if 关闭。

要真正回答您的问题,我认为没有机会删除然后结束。还记得Pascal / Delphi吗?那里还有一个然后。只有C风格的语言才能拥有它。

答案 2 :(得分:0)

使用冒号而不是像这样呢? http://www.java2s.com/Code/Ruby/Statement/layoutanifstatementisbyreplacingthethenwithacolon.htm

如果您愿意,可以通过多种方式进行短路。

条件语句只是Ruby语法的一部分,使其更像英语。