Ruby 尝试将数组传递给我自己的方法,例如我的#inject,它与#inject做相同的事情
我正在尝试创建一个新方法(例如my_inject),它将数组作为参数。这个新方法应该复制inject方法的相同功能 数组.注入(1){|积,n |积*n} 注入方法: 1.累加器从0开始 二,。my_inject在集合中迭代 三,。对每个i创建执行计算 四,。然后累加器复位到该结果 计算 五,。下一次迭代:while循环/递归 编辑:这可能是一个解决方案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
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
方法是否可以接受任何参数?你为什么要把number1
指定为一个参数呢?inject
根据定义,它会占用一个块,并做一些与你试图做的完全不同的事情。我能理解这是为了锻炼,但这似乎是一个非常糟糕的锻炼。用我真正想做的事情更新了这个问题我很困惑。您是否正在尝试编写自己的方法来执行与#inject
相同的操作?如果是这样,“数字到字母”问题与此有什么关系?不用担心。我自己只是一名兼职程序员,我发现不时地更新一些基础知识是很有帮助的,所以当你只做了这么短时间的编程时,从一开始就开始一个或两个tute没有什么丢脸的。祝你好运只使用ruby,我希望将数组传递给我的方法,该方法执行与inject相同的操作