目前正在学习创建块和我自己的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})
答案 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]