我有一个遍历对象数组的函数,并根据原始数组中的某些属性创建一个新的对象数组。当我运行此代码时,我收到错误
'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
答案 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。