代码之家  ›  专栏  ›  技术社区  ›  jsbueno

如何在Ruby中将多个代码块传递给函数?

  •  6
  • jsbueno  · 技术社区  · 15 年前

    我对Ruby一无所知,现在正在读一些有关它的文档。 在阅读了关于使用代码块和“yield”关键字之后,我有一个疑问:是否可以将多个代码块传递给一个函数,并在被调用函数中随意使用这两个代码块。

    4 回复  |  直到 15 年前
        1
  •  9
  •   abyx    15 年前

    你一次只能通过一个街区,但实际上街区是 Proc 实例,您可以传递任意数量的实例作为参数。

    def mymethod(proc1, proc2, &block)
      proc1.call
      yield if block_given?
      proc2.call
    end
    
    mymethod(Proc.new {}, Proc.new {}) do
      # ...
    end
    

    然而,它很少有意义。

        2
  •  1
  •   abyx    15 年前

    语法上,使用 yield 语句只支持传递给函数的一个代码块。

    当然,您可以将一个函数传递给多个其他函数或“代码块对象”。( Proc 对象),并使用它们,但不只是使用 产量 .

        3
  •  1
  •   abyx    15 年前

    你可以创造 Proc 对象并根据您的喜好传递。

    我推荐阅读 this page 要理解所有不同的块和闭包结构的微妙之处,Ruby有。

        4
  •  1
  •   Dafydd Rees    15 年前

    你可以使用 call 方法而不是屈服于处理传入的两个独立块。

    方法如下:

    def mood(state, happy, sad )
      if (state== :happy)
        happy.call
      else
        sad.call
      end
    end
    
    mood(:happy, Proc.new {puts 'yay!'} , Proc.new {puts 'boo!'})
    mood(:sad, Proc.new {puts 'yay!'} , Proc.new {puts 'boo!'})
    

    可以通过以下方式传递参数:

    happy.call('very much')
    

    参数的工作方式与块中预期的一样:

    Proc.new {|amount| puts "yay #{amount} !"}
    
    推荐文章