为什么File.open("xx") do |i| 要写在一行呢?

为什么File.open("xx") do |i| 要写在一行呢?

File.open("a.txt") do |i|
while a=i.gets
puts a
end

为什么一定要把
do |i| 和 File.open("a.txt")写在一行呢?
File.open("a.txt")
do |i|
while a=i.gets
puts a
end

这样就出错了。
你下面那样的话,Ruby可能会认为那是一个函数或者是一个循环什么的。
block就是这样,就像公理一样,你按这样写就行了
这样写道是可以,不过很别扭就是了
比如

[Copy to clipboard] [ - ]
我想应该是ruby没有句分隔符,所以一行就是一句,又因为ruby是解释型语言,按一行解释,所以如果写成
File.open("a.txt")
do |i|
while a=i.gets
puts a
end
那么第一行已经被解释过了,第二行以下就不知道是属于哪个的?当然会报错
ruby的分隔符就是换行符
分号也是分隔符
do...end和{...}都是块
引申一下:

[Copy to clipboard] [ - ]
it's a BLOCK
File.open()里有相应的yield 调用它,所以必须是在同一行
真好,大家来讨论!