Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby 尝试将数组传递给我自己的方法,例如我的#inject,它与#inject做相同的事情_Ruby_Arrays - Fatal编程技术网

Ruby 尝试将数组传递给我自己的方法,例如我的#inject,它与#inject做相同的事情

Ruby 尝试将数组传递给我自己的方法,例如我的#inject,它与#inject做相同的事情,ruby,arrays,Ruby,Arrays,我正在尝试创建一个新方法(例如my_inject),它将数组作为参数。这个新方法应该复制inject方法的相同功能 数组.注入(1){|积,n |积*n} 注入方法: 1.累加器从0开始 二,。my_inject在集合中迭代 三,。对每个i创建执行计算 四,。然后累加器复位到该结果 计算 五,。下一次迭代:while循环/递归 编辑:这可能是一个解决方案 def my_inject(acc=0) array.each { |i| acc = yield(acc, i)} ac

我正在尝试创建一个新方法(例如my_inject),它将数组作为参数。这个新方法应该复制inject方法的相同功能

数组.注入(1){|积,n |积*n}

注入方法: 1.累加器从0开始 二,。my_inject在集合中迭代 三,。对每个i创建执行计算 四,。然后累加器复位到该结果 计算 五,。下一次迭代:while循环/递归

编辑:这可能是一个解决方案

  def my_inject(acc=0)
    array.each { |i| acc = yield(acc, i)}
    acc  
  end
end

说到我在一个问题下所说的-要重新定义该方法,只需打开一个类并定义一个与旧方法同名的方法:

class Array
  def inject(value)       # You should never redefine method so it changes its interface/API!
    (64+value).chr
  end
end
更新后的回答

您需要在可枚举模块上定义求和方法:

module Enumerable
  def sum
    reduce(&:+)       
  end
end

如果您使用的是rails,它已经内置了,所以您只需运行
(5..10).sum
。请注意,
(5..10)
不是一个数组,而是一个范围,因此在数组上定义和将不起作用。但是,在可枚举模块(定义
reduce
inject
方法)上定义它是有意义的,它同时包含在数组和范围中(也包含在散列和少数其他类中)

inject方法看起来像这样:

def my_inject(my_array, accumulator)
  my_array.each do |item|
    accumulator = yield accumulator, item
  end
  accumulator 
end
此方法迭代数组,并将每个项的当前累积值和项本身传递给给定的块。它接受返回值,并用它替换当前累积值


它返回数组的最后一个结果。

如果要直接在数组上调用该方法,请单击此处:

def my_inject(accumulator)
  self.each do |item|
    accumulator = yield accumulator, item
  end
  accumulator 
end

我不知道;请理解,
\my\u inject
方法是否可以接受任何参数?你为什么要把number
1
指定为一个参数呢?
inject
根据定义,它会占用一个块,并做一些与你试图做的完全不同的事情。我能理解这是为了锻炼,但这似乎是一个非常糟糕的锻炼。用我真正想做的事情更新了这个问题我很困惑。您是否正在尝试编写自己的方法来执行与
#inject
相同的操作?如果是这样,“数字到字母”问题与此有什么关系?不用担心。我自己只是一名兼职程序员,我发现不时地更新一些基础知识是很有帮助的,所以当你只做了这么短时间的编程时,从一开始就开始一个或两个tute没有什么丢脸的。祝你好运只使用ruby,我希望将数组传递给我的方法,该方法执行与inject相同的操作