Ruby 连续收集/选择/拒绝/每个时的代码折叠
我在ruby中经常使用数组和散列,最后得到的代码如下所示:Ruby 连续收集/选择/拒绝/每个时的代码折叠,ruby,textmate,folding,Ruby,Textmate,Folding,我在ruby中经常使用数组和散列,最后得到的代码如下所示: 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块,它也无法找出(这是可以
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:考虑到它可能有两个折叠级别,我只关心外部的连续折叠(带I的块)老实说,一些复杂的东西可能会让TextMate和其他需要维护它的人一样困惑,这包括你将来 无论何时,只要看到某个值汇总为一个值,就可以使用Enumerable#inject 在您的示例中,奇怪的是您使用select返回完整数组,据称使用转换为_i,但事实上Enumerable#select并没有这样做,而是拒绝函数返回nil的任何数组。我想这不符合你的价值观
另外,根据.average方法的实现方式,您可能希望使用0.0(而不是0)作为注入调用的种子,以使用浮点值。老实说,一些复杂的问题可能会让TextMate和其他必须维护它的人一样困惑,这也包括您将来 无论何时,只要看到某个值汇总为一个值,就可以使用Enumerable#inject 在您的示例中,奇怪的是您使用select返回完整数组,据称使用转换为_i,但事实上Enumerable#select并没有这样做,而是拒绝函数返回nil的任何数组。我想这不符合你的价值观
另外,根据.average方法的实现方式,您可能希望使用0.0(而不是0)作为注入调用的种子,以使用浮点值。我发布的代码只是我写下的东西,没有真正研究过它,我只是想让它看起来像我写的大部分代码一样(/me将select改为->collect)。我将研究inject,以及它是否有助于我简化事情。我发布的代码只是我写下来的东西,没有真正研究它,我只是想让它看起来像我写的大部分代码一样(/me变成select->collect)。我将研究inject,以及它是否有助于我简化事情。
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