【发布时间】:2014-02-27 09:29:17
【问题描述】:
我不明白的部分是如何使这个产生,以便数组中的元素在将它们添加在一起之前对它们进行计算(在块中指定),对它们进行 if block_given?。
例如,计算可能是|x| x+3(将每个元素加 3),但我希望它适用于任何类型的元素操作,例如 |x| x**3 或 |x| x*5,所以my_ary ([1,2,3]) 中的元素按照计算指定的方式更改。
所以本质上我是在问我需要对我的代码中读取 yield array.each{|x|} if block_given? 的部分做些什么。我在这里尝试做的是说数组中的每个元素都应该对元素执行块中声明的任何内容,以便对其进行更改。
我传递给 this 的内容类似于 my_ary.sum(2) {|x| x **4}。
class MyArray
attr_reader :ary
def init(ary)
@ary = ary
end
def sum(init_val = 0)
yield ary.each{|x|} if block_given?
(@ary.inject(0){|x,y|x+y}) + init_val
end
end
【问题讨论】:
-
请改进您的问题。不清楚你在说什么。
-
嗨,sawa,这更清楚了吗?
-
第一个
end指的是什么?看起来您正在尝试将大括号表示法与if和do...end结合起来,但没有do。您是否尝试将块传递给sum方法?如果是这样,你不应该做一些更像def sum(init_val = 0, &block)的事情吗? -
不要在 cmets 中发布您的代码,编辑您的问题以获得完整的代码示例。
-
使用
@sawa(@,公平地说,我记得它叫做通知)。没有这个,sawa 将不会收到有关您的评论的通知,但我可能是错的。嗯,我很困惑你在问什么。 我认为你想要:arr=[1,2,3],然后应用方法sum:arr.sum(10){|x| x+4}。 1.[1+4, 2+4, 3+4](将x+4应用于数组的所有元素)。然后对所有元素求和:1+4+2+4+3+4=18。最后加上 10(18+10)。我对吗?附言。你的第一次编辑更好。