我发现了三种在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"
我不明白:
声明#4似乎是最自然的写作方式。我不明白为什么不可能。
答案 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语法的一部分,使其更像英语。