字符串方法的类错误未定义Ruby方法

字符串方法的类错误未定义Ruby方法,ruby,regex,string,file-io,Ruby,Regex,String,File Io,我不明白为什么下面的方法不起作用: #TODO: #Open file-io-samples/MultipleLinesCustomDelimiter.txt #Break each line into fields #Convert Times from mm:ss to seconds #Remove any redundant spaces. ####################################################### Song = Struct.new

我不明白为什么下面的方法不起作用:

#TODO:
#Open file-io-samples/MultipleLinesCustomDelimiter.txt
#Break each line into fields
#Convert Times from mm:ss to seconds
#Remove any redundant spaces.
#######################################################

Song = Struct.new(:title, :name, :length)

File.open("file-io-samples/MultipleLinesCustomDelimiter.txt") do |file_data|
  songs = []
  file_data.each do |line|
    file, length, name, title =  line.chomp.split(/\s*\|\s*/)
    name.squeeze!(" ") #Error: undefined method for nilClass
    mins, secs = length.scan(/\d+/) #Error: undefined method for nilClass
    secs += mins*60
    songs << Song.new(title, name, secs)
  end
  puts songs[1] #make sure output is consistent.
end
这是Ruby编程书中的一个例子。我不知道当扫描方法和挤压方法是字符串对象而不是类对象时,为什么会抛出错误。如果没有这些,puts歌曲[1]的输出看起来是正确的。

最后一行

:::::

与拆分不匹配,因此名称、长度和标题为零

该文件最终为

:::::

一个类似的例子:

a,b,c = [1,2]
#a=1
#b=2
#c = nil
最后一排

:::::

与拆分不匹配,因此名称、长度和标题为零

该文件最终为

:::::

一个类似的例子:

a,b,c = [1,2]
#a=1
#b=2
#c = nil

他们说他们是
nilClass
,不是
String
。我知道,但我不明白他们为什么不能是String。他们说他们是
nilClass
,不是
String
。我知道,但我不明白他们怎么不能是String。啊,我想用它来检测文件的结尾。我这方面真是疏忽。谢谢你的帮助。我会在冷却后标记答案。不客气,不幸的是,除了例外,没有太多的上下文,所以这是使用strategic puts语句或调试器的问题。是的,这对我来说是一个非常简单的错误。啊,我想用它来检测文件的结尾。我这方面真是疏忽。谢谢你的帮助。我会在冷却后标记答案。不客气,不幸的是,除了例外情况,没有太多上下文,所以这是使用strategic puts语句或调试器的问题。是的,我犯了一个非常简单的错误。