为什么这两种风格都有效?它们在基础层面上是不同的吗?
while true do
puts "I am awesome"
end
while true
puts "I am awesome"
end
for i in 1..6 do
puts i
end
for i in 1..6
puts i
end
答案 0 :(得分:3)
while
和for
不是方法,而是关键字,相关结构内置于Ruby中。跟随它们的部分可能看起来类似于块,但不是块。由于它不是块,因此不需要do
,但由于此构造与块的相似性,人们可能会意外地写do
。因此,通过设计,do
关键字在这些结构中是可选的。
答案 1 :(得分:1)
你必须有一些方式告诉Ruby条件结束并且循环开始。 Ruby允许您通过两种不同的方式告诉它:使用关键字do
或使用表达式分隔符(;
或换行符)。因此,以下所有内容都是等效的:
while true do puts "I am awesome" end
while true; puts "I am awesome" end
while true
puts "I am awesome" end
使用 关键字和表达式分隔符是多余的,但不是有害的,那么为什么它应该是错误?这就像告诉Ruby"条件在这里结束。不,真的,条件在这里结束了!"
完全与条件相同
if true then 1 else 0 end
if true; 1 else 0 end
if true
1 else 0 end
甚至方法定义:
def foo() 'foo' end
def foo; 'foo' end
def foo
'foo' end