Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby 连续收集/选择/拒绝/每个时的代码折叠_Ruby_Textmate_Folding - Fatal编程技术网

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块,它也无法找出(这是可以

我在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
块,它也无法找出(这是可以理解的,因为即使我也找不到“正确”的方法来折叠上面的块)上面的块的开始和结束位置

您将如何折叠上述代码示例


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