仅仅因为鲁比语是动态的,而且含蓄的,并不意味着你不必考虑种类。
如果没有明确的加固剂(通常称为<条码>缩略语/代码>)的<代码>可观的#inject就属于这种情况。
reduce :: [a] → (a → a → a) → a
或者说,我只是由另一个人组成。
Enumerable[A]#inject {|A, A| A } → A
你会注意到,所有类型都是相同的。 <代码>可计算编码>的要素类型、两个论点类型、组群的返回类型和总方法的返回类型。
。
fold :: [b] → a → (a → b → a) → a
或
Enumerable[B]#inject(A) {|A, B| A } → A
Here you see that the accumulat或 can have a different type than the element type of the collection.
这两项规则一般都通过所有<条码>获得。 与类型有关的问题:
- the type of the accumulat或 and the return type of the block must be the same
- when not passing an explicit accumulat或, the type of the accumulat或 is the same as the element type
在这种情况下,是第1条。 当你做这样的事情时,你会这样做。
acc[key] = value
在您的栏目中,任务评价的是分配价值,而不是任务接收者。 页: 1
acc.tap { acc[key] = value }
另见。 为什么没有初步价值,鲁比拉的注射方法不能将扼杀时间加在一起?
BTW: you can use destructuring bind to make your code much m或e readable:
a.inject({}) {|r, (key, value)| r[key] = value; r }