为什么这个局部变量标记为未定义? - Ruby

时间:2011-02-09 22:17:00

标签: ruby initialization

我有一个遍历对象数组的函数,并根据原始数组中的某些属性创建一个新的对象数组。当我运行此代码时,我收到错误

  'nonstop'中的

:未定义的局部变量或main的方法`sort_list':Object(NameError)

我确保sort_list数组是在循环之外初始化的,我也尝试用一定的大小初始化它,但是我一直收到这个错误。我对ruby很新,所以我做错了什么?

    def nonstop(flight_list)
      index = 0
      sort_list[] = nil
      flight_list.each do |curr|
        if (curr.depapt == ARGV[2] && curr.arrapt == ARGV[3])
          sort_list[index] = curr
          index += 1
        end
      end
      sort_list.sort! { |a,b|  a.deptime <=> b.deptime}
      sort_list.each do |curr|
         puts "#{curr.flightnum}\t#{curr.deptime}\t#{curr.arrtime}"
      end
      if (sort_list.empty?)
        puts "none"
      end
    end

3 个答案:

答案 0 :(得分:3)

我认为你需要像这样初始化它:

sort_list = []

对我来说,这不会在irb中引发错误。

答案 1 :(得分:2)

你已经得到了正确答案 我会进行一些重构,这对初学者很有用。

def nonstop(flight_list)
  sort_list = flight_list.select { |curr| curr.depapt == ARGV[2] && curr.arrapt == ARGV[3] }
  sort_list.sort_by! &:deptime
  sort_list.each do |curr|
    puts "#{curr.flightnum}\t#{curr.deptime}\t#{curr.arrtime}"
  end
  puts "none" if sort_list.empty?
end

答案 2 :(得分:2)

以下是sort_list[] = nil在ruby中不起作用的原因:

[]它本身就是Array.new

的快捷方式 变量名称在变量上调用[]

[]。所以在这种情况下[]是一种方法。

sort_list未设置为任何内容,因此未定义。因此sort_list[]正在调用[]未定义的值

将任何变量设置为nil会使其为nil class。