带有{}块分隔符的Ruby for循环错误

Pri*_*ens 10 ruby

在Ruby语言中,以下工作在irb中

for fruit in ['apple', 'banana', 'cherry', 'date'] do
    puts fruit 
end
Run Code Online (Sandbox Code Playgroud)

但这一个没有

# error
for fruit in ['apple', 'banana', 'cherry', 'date'] { puts fruit } 
Run Code Online (Sandbox Code Playgroud)

请注意以下块分隔符不会出错

5.times do |i|
    puts "hello "+i.to_s
end

5.times { |i| puts "hello "+i.to_s }
Run Code Online (Sandbox Code Playgroud)

编辑:我猜我所观察到的是与end替代{}的方式不一致有人可以解释为什么或请指出我的错误?

小智 10

这篇文章的以下引用很好地解释了"不一致"(强调我的):

end是一个结束上下文的通用关键字(条件,类和模块定义,方法定义,循环和异常捕获[语句]).大括号是用于定义块或哈希的特殊语法.

for循环是控制结构 - 不是带有块参数的方法 - 因此必须用end关键字关闭它们.方法,例如Enumerable#timesEnumerable#each有一个块参数,可以用任何一个{ }或者do ... end语法来定义.