当随机计算块通过时产生一些东西

时间:2014-02-03 18:40:06

标签: ruby block yield

我不理解的部分是如何产生这个产量,以便数组中的元素在添加之前对它们if block_given?进行计算(在块中指定)。一起。

例如,计算可以是|x| x+3(为每个元素添加3),但我希望这适用于任何类型的元素操作,例如|x| x**3或{ {1}},以便|x| x*5my_ary)中的元素按计算指定的方式更改。

基本上我问我需要对我的代码中读取[1,2,3]的部分做些什么。我在这里尝试做的是说数组中的每个元素应该具有对元素执行的块中所述的任何内容,以便它被更改。

我传给的是yield array.each{|x|} if block_given?

my_ary.sum(2) {|x| x **4}

1 个答案:

答案 0 :(得分:2)

class MyArray
  attr_reader :ary

  def initialize(ary)
    @ary = ary
  end
  def sum n, &block
    new_ary = @ary.collect &block # ary after executing block
    ary_sum = new_ary.inject(0){|sum, x| sum+=x} # sum all elements of the array
    return ary_sum + n 
  end
end

def nsum n, &block,此处& 将<{1}}或{}之间的代码(do; endProc之间的代码)保存到@ary.collect &block的实例。它基本上是保存到变量的代码块。

collect此处,block希望proc&procblock更改为collectinject为每个元素执行块,并返回新数组。

sum - 将块元素生成,将其添加到sum,然后将其作为sum变量返回。在下一次迭代中(下一次产生到块)[1,2,3].inject(0){|s, x| s+=x} # sum = 0; x = 1; # sum = 1; x = 2 # sum = 3; x = 3 # sum = 6 # inject returns 6 because there is no elements in the array 将是上一次迭代的最后一个值。

{{1}}