【问题标题】:Ruby passing blocks to blocksRuby 将块传递给块
【发布时间】:2011-09-21 03:53:54
【问题描述】:
(1..5).each do|x| puts yield(x) end do |x| return x*2 end

在我的脑海中,这将循环 1 到 5 调用第一个块,该块将让给第二个块并放入 2、4、6、8、10

为什么这不起作用以及最简单的方法是什么。

【问题讨论】:

    标签: ruby closures


    【解决方案1】:

    yield 在方法中工作。引自“Programming Ruby”:

    在方法中,可以调用块,就好像它是一个 方法本身,使用 yield 语句。

    所以,如果你想让这段代码正常工作,你可以把它改成这样:

    def f(n)
      (1..n).each do |x|
        puts yield(x)
      end
    end
    
    f(5) do |x|
      x * 2
    end
    

    如果你不想定义方法,你应该将块放入变量中然后使用它:

    b = Proc.new{|x| x *2 }
    
    (1..5).each do |x|
      puts b.call(x)
    end
    

    【讨论】:

      【解决方案2】:

      最简单的写法:

      (1..5).each { |x| puts x*2 }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2012-06-10
        • 2019-02-20
        • 2014-11-26
        • 2012-07-04
        • 1970-01-01
        • 1970-01-01
        • 2014-01-05
        相关资源
        最近更新 更多