Ruby代码报错:undefined method `location' for nil:NilClass 求助
问题排查与修复
核心错误:read_tracks 循环逻辑完全错误
你的read_tracks函数里,初始化trackcount = count后,循环条件写的是while trackcount < count——初始值已经等于count,循环永远不会执行,导致tracks数组始终为空。后续你尝试访问tracks中元素的location方法时,自然会触发nil:NilClass的错误(空数组里没有任何Track对象,取到的元素是nil)。
修复后的read_tracks代码:
def read_tracks(pineapple_music, count) tracks = Array.new trackcount = 0 # 初始值改为0,从0开始计数 while trackcount < count track = read_track(pineapple_music) tracks << track trackcount += 1 end return tracks end
次要问题优化(避免后续潜在bug)
read_track未处理换行符gets会保留输入末尾的换行符,建议添加chomp清理,避免Track的名称和路径带多余的换行符:def read_track(pineapple_music) song = pineapple_music.gets.chomp file = pineapple_music.gets.chomp t = Track.new(song, file) return t endalbum_genre错误转为整数
流派(genre)是字符串类型(比如"Pop"、"Jazz"),你当前用to_i转换会把非数字字符串转为0,完全不符合逻辑,应该去掉to_i:album_genre = music_file.gets.chomp # 移除.to_i可选:添加文件读取异常处理
当前代码没处理文件不存在的情况,可简单加个捕获逻辑:def read_file(pineapple_music) begin music_file = File.new(pineapple_music, "r") albums = read_albums(music_file) music_file.close() return albums rescue Errno::ENOENT puts "错误:文件 #{pineapple_music} 不存在" return [] end end
验证逻辑
修复核心循环问题后,read_tracks会正确循环count次,读取对应数量的Track对象存入数组,后续访问track.location时就不会出现nil调用方法的错误。
内容的提问来源于stack exchange,提问作者LycoReco2007
相关产品推荐
相关产品推荐

