如何将块传递给新数组的函数参数(到底我们传递给它的地方)?

时间:2011-12-12 00:40:27

标签: ruby arrays

我们可以按照以下方式创建新数组:

values = Array.new(5) { rand(6) + 1 } # [3, 2, 3, 3, 2]

但它如何在函数参数方面起作用?

例如,如果我定义了一些函数:

def some_func(a, b, c)
end

函数定义了3个参数,我可以将它们中的一些作为可选项,但无论哪种方式调用此函数我都会使用

some_func(value1)
some_func(value1, value2)
some_func(value1, value2, value3)

但是对于我来说,对于我来说没有意义,那个定义值的块会去哪里?

5绝对是new函数的参数,但块怎么办?

谢谢。

1 个答案:

答案 0 :(得分:3)

将块传递给Array.new的方式与将块传递给任何其他方法的方式相同:它是一种隐式参数。它没有出现在方法的参数列表中(除非您使用&将其“统一”到Proc中),但您可以使用yield调用它并使用block_given?检查它是否在那里

例如,如果您的some_func方法需要阻止,则可能如下所示:

def some_func(a,b,c)
  if block_given?
    yield a+b+c
  else
    a+b+c
  end
end

some_func(1,2,3) #=> 6
some_func(1,2,3) {|x| x*2} #=> 12