我可以传递一个数组和一个块作为参数吗?

Can I pass an array and a block as a parameter?

目前正在学习创建块和我自己版本的数组方法。我想知道是否可以将数组和块作为参数传递给方法。下面是我正在处理的代码,它应该做什么是不言自明的,但我一直收到错误。特别是在方法调用和我传递代码块的地方。

def mapper(arr, &prc)
  new_array = []
  arr.length.times do |i|
    new_array << prc.call(arr[i])
  end
  new_array
end

mapper([1,2,3,4], {|i| i * 2})

您可以通过将块传递到括号外(与方法调用相邻)来实现:

p mapper([1, 2, 3, 4]) { |index| index * 2 }
# [2, 4, 6, 8]

否则会导致语法错误。 Ruby 不知道块被传递到哪里。

附带说明一下,您也可以仅将数组定义为所需参数,然后生成传递的块:

def mapper(arr)
  arr.size.times.map do |i|
    yield(arr[i])
  end
end

p mapper([1, 2, 3, 4]) { |index| index * 2 }
# [2, 4, 6, 8]