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

时间:2016-12-29 05:09:24

标签: ruby

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

for fruit in ['apple', 'banana', 'cherry', 'date'] do
    puts fruit 
end

但是这个不是

# error
for fruit in ['apple', 'banana', 'cherry', 'date'] { puts fruit } 

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

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

5.times { |i| puts "hello "+i.to_s }

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

2 个答案:

答案 0 :(得分:10)

this帖子的以下引用很好地解释了“不一致”(强调我的):

  

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

end循环是控制结构 - 不是带有块参数的方法 - 因此必须使用for关键字关闭它们。 endEnumerable#times等方法都有一个块参数,可以使用Enumerable#each{ }语法定义。

答案 1 :(得分:0)

for不是为ObjectKernel定义的方法,并且它不会出现阻止。

你不能写:

class A {
  def method {
  }
}

或者

您可以定义自定义my_for方法:

module Kernel
  def my_for(elements, &block)
    elements.each(&block)
  end
end

my_for ['apple','banana','cherry', 'date'] do |fruit|
  puts fruit
end

my_for ['apple','banana','cherry', 'date'] { |fruit| puts fruit }