LocalJumpError(Ruby on Rails)

时间:2009-06-24 08:54:12

标签: ruby-on-rails ruby

我搜索过/谷歌搜索但我正在努力解决以下问题。

我正在构建一个Rails 2.3.2应用程序,其中一个要求是计算结果数组的中位数。我正在使用代码来计算Ruby Cookbook的中位数,但是当我试图找到一个奇数个成员的数组的中位数时,继续遇到错误'LocalJumpError - no block given'的问题。 / p>

我视图中的示例代码如下:

<%= survey_response.median([6,4,5,4,4,2]) %>

然后在survey_response.rb模型中,方法如下:

def mean(array)
  array.inject(array.inject(0) { |sum, x| sum += x } / array.size.to_f)
end

def median(array,already_sorted=false)
  return nil if array.empty?
  array = array.sort unless already_sorted
  m_pos = array.size / 2
  return array.size % 2 == 1 ? array[m_pos] : mean(array[m_pos-1..m_pos])      
end

当中值方法返回到获取阵列中奇数项目的媒体的均值方法时,会导致错误。我只是无法弄清楚为什么我会得到那个错误或者确实如何解决它 - 所以我非常感谢任何人可以提供给我的任何帮助/指导/笑声!

由于

西蒙

3 个答案:

答案 0 :(得分:1)

Lis看起来是因为你在数组中使用了小数索引。尝试更换:

m_pos = array.size / 2

使用:

m_pos =(array.size / 2).ceil

另外,请尝试将平均功能更改为:

def mean(array)
  array.inject(0) { |sum, x| sum += x } / array.size.to_f
end

答案 1 :(得分:1)

更好的代码:

def mean(array)
  array.inject { |sum, n| sum + n } / array.length.to_f
end

def median(array)
  return nil if array.empty?
  array.sort!
  middle = array.length / 2
  (array.length % 2 == 1) ? array[middle] : mean([array[middle-1], array[middle]])
end

puts median([5,11,12,4,8,21]) # => 9.5

答案 2 :(得分:1)

mean方法看起来非常糟糕。试试这个:

def mean(array)
  a.inject(0) { |sum,x| sum += x } / a.size.to_f
end