【问题标题】:How to pass multiple blocks to method in ruby? [duplicate]如何将多个块传递给ruby中的方法? [复制]
【发布时间】:2012-03-15 17:44:50
【问题描述】:

我可以将多个参数和最后一个块参数传递给方法。但是当我尝试通过多个块时它会显示错误。我想知道怎么做?

def abc(x, &a)
  x.times { a.call("hello") }
end

abc(3) {|a| puts "#{a} Sana"}
abc(1, &proc{|a| puts "#{a} Sana"})

但下面的定义给出了错误

def xyz(x, &a, &b)
  puts x
  a.call
  b.call
end

【问题讨论】:

    标签: ruby closures


    【解决方案1】:

    你可以使用Proc:

    def xyz(x, a, &b)
      puts x
      a.call
      b.call
    end
    
    xyz(3, Proc.new { puts 'foo' }) { puts 'bar' }
    
    # or simpler
    
    xyz(3, proc { puts 'foo' }) { puts 'bar' }
    

    【讨论】: