题
我和阵列玩和哈希相当多的红宝石和一些代码,看起来像这样结束:
sum = two_dimensional_array.select{|i|
i.collect{|j|
j.to_i
}.sum > 5
}.collect{|i|
i.collect{|j|
j ** 2
}.average
}.sum
(让我们都假装的是,上述代码示例有意义现在...)
但问题是,即使TextMate的(我选择的编辑器),很容易拿起简单{...}
或do...end
块,它不能找出(这是可以理解的,因为即使我不能找到一个“正确”的方式来折上面的),其中上述块的开始和结束折叠它们。
你如何折叠上面的代码示例
PS:考虑到它可具有2层折叠,我只关心外连续的一(与第i块)
解决方案
说实话,这东西令人费解可能是混乱的TextMate不亚于其他人谁必须保持它,这包括你的未来。
每当你看到的东西,卷起成一个单一的值,它是使用可枚举#注入一个很好的例子。
sum = two_dimensional_array.inject(0) do |sum, row|
# Convert row to Fixnum equivalent
row_i = row.collect { |i| i.to_i }
if (row_i.sum > 5)
sum += row_i.collect { |i| i ** 2 }.average
end
sum # Carry through to next inject call
end
什么是你的榜样奇怪的是你正在使用选择返回全阵列,涉嫌使用to_i转换,但实际上可枚举#选择确实没有这样的事,而是拒绝任何针对该函数返回零。我假定不关你的价值观。
而且取决于你的。平均方法是如何实现的,则可能需要的种子与0.0而不是0喷出呼叫使用一个浮点值。
不隶属于 StackOverflow