代码之家  ›  专栏  ›  技术社区  ›  user7452246

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

  •  0
  • user7452246  · 技术社区  · 7 年前

    目前正在学习创建块和我自己版本的数组方法。我想知道是否可以将数组和块作为参数传递给方法。下面是我正在处理的代码,它应该是不言自明的,但我不断遇到错误。尤其是方法调用和我通过块的地方。

    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 回复  |  直到 7 年前
        1
  •  1
  •   Sebastián Palma    7 年前

    可以通过将块传递到括号外(靠近方法调用)来完成:

    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]