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

时间:2018-01-20 23:30:21

标签: ruby-on-rails ruby block proc

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

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})

1 个答案:

答案 0 :(得分:1)

您可以通过将块传递到括号外(与方法调用相邻)来执行此操作:

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]