Scala递归函数else if返回单位

Scala递归函数else if返回单位,scala,tail-recursion,Scala,Tail Recursion,Noob Scala问题: 我有以下代码摘录: @tailrec def buildObjectFromFile(dataList: List[String], fileObject: IncomingFile): IncomingFile = { dataList match { case Nil => fileObject case data :: list => val recordIdentifier = data.substring(0,

Noob Scala问题:

我有以下代码摘录:

@tailrec
def buildObjectFromFile(dataList: List[String], fileObject: IncomingFile): IncomingFile = {
  dataList match {
    case Nil => fileObject

    case data :: list =>
      val recordIdentifier = data.substring(0, 2)

      if (recordIdentifier.equals("00")) {
        val fileHeader = new fFileHeader(
            ...
        )

        buildObjectFromFile(list, new IncomingFile(fileHeader, fileObject.accountsList, fileObject.fileTrailer))
      } else if (recordIdentifier.equals("01")) {
        val accountHeader = new AccountHeader(
          ...
        )

        fileObject.accountsList += new Account(data.substring(12, 22), accountHeader, null, null, null)

        buildObjectFromFile(list, new IncomingFile(fileObject.fileHeader, fileObject.accountsList, fileObject.fileTrailer))
      } else if (recordIdentifier.equals("99")) {  // <--- Problematic
        val fileTrailer = new FileTrailer(
          ...
        )

        buildObjectFromFile(list, new IncomingFile(fileObject.fileHeader, fileObject.accountsList, fileTrailer))
      }
  }
}
@tailrec
def buildObjectFromFile(数据列表:列表[String],文件对象:IncomingFile):IncomingFile={
数据表匹配{
case Nil=>fileObject
案例数据::列表=>
val recordIdentifier=data.substring(0,2)
if(recordIdentifier.equals(“00”)){
val fileHeader=新的fFileHeader(
...
)
buildObjectFromFile(列表,新收入文件(文件头,文件对象.accountsList,文件对象.fileTrailer))
}else if(recordIdentifier.equals(“01”)){
val accountHeader=新accountHeader(
...
)
fileObject.accountsList+=新帐户(data.substring(12,22),accountHeader,null,null)
buildObjectFromFile(列表,新收入文件(fileObject.fileHeader,fileObject.accountsList,fileObject.FileTraile))

}else if(recordIdentifier.equals(“99”)){/您可以通过为整个if-else-if表达式实现else来修复。现在您没有它,所以整个块具有单位类型

是来自
buildObjectFromFile
的返回类型正确,即
IncomingFile
?此外,您可能应该添加一个
else
块,否则retrun值将是
AnyVal
使
dataList
测试
if
..
else
,然后在
数据上执行模式
匹配
。子字符串(0,2)
。即使没有默认值(即final
else
),逻辑也更易于阅读/遵循,结果类型也一致。首先添加else块。