我找到了三种在 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"
我不明白:
- 为什么#3 中需要then和end ,并且,
- 为什么我需要更改顺序才能让#2 工作。
语句#4 似乎是最自然的写法。我不明白为什么这是不可能的。
我找到了三种在 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 似乎是最自然的写法。我不明白为什么这是不可能的。
" if x then y end
" 语法用于多行条件语句,而 " y if x
" 形式用于简洁的单行条件语句。在第then
一种情况下,有必要告诉 Ruby 条件已经结束(因为 Ruby 不需要像 C 那样的括号),并且end
有必要告诉 Ruby 整个if
块已经结束(因为它可以是多行)。
您可以将 替换then
为分号,因为换行符也表示条件结束。end
你不能用 multiline摆脱if
。如果您想要简洁的单行符,请使用第二种形式或三元运算符。
例如,假设
x = true
以下将评估 true,并返回 y
x ? y :
=> y
同样,这将评估为 false 并且不返回任何内容
!x ? y :
=>
在“:”之后添加一个术语以表示 else 情况
!x ? y : z
=> z
问题是这两种方式实际上都是一种自然的思考方式:
如果这是真的,那就做点什么
如果这是真的,做某事
看?Ruby 试图以这种方式接近英语语法。end只是结束块所必需的,而在第二个版本中,块已经用if关闭了。
要真正回答您的问题,我认为没有机会将then和end删除。还记得帕斯卡/德尔福吗?你也有一个then那里。只有 C 风格的语言没有它是典型的。
那么使用冒号而不是这样呢?http://www.java2s.com/Code/Ruby/Statement/layoutanifstatementisbyreplacingthethenwithacolon.htm
如果您愿意,有多种方法可以短路。
条件语句只是 Ruby 语法的一部分,使其更像英语。