我们可以按照以下方式创建新数组:
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
函数的参数,但块怎么办?
谢谢。
答案 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