Scala scrutinee与模式类型不兼容;找到:package.SomeObject所需对象:Unit

Scala scrutinee与模式类型不兼容;找到:package.SomeObject所需对象:Unit,scala,pattern-matching,sbt,case,Scala,Pattern Matching,Sbt,Case,我正在试用scala中的文件搜索程序 FileChecker.scala package fileSearcher import sun.org.mozilla.javascript.internal.ast.Yield class FilterChecker(filter:String) { def matches(content: String) = content contains filter def findMatchedFiles(fileObjects: List[IOOb

我正在试用scala中的文件搜索程序

FileChecker.scala

package fileSearcher

import sun.org.mozilla.javascript.internal.ast.Yield

class FilterChecker(filter:String) {

def matches(content: String) = content contains filter

def findMatchedFiles(fileObjects: List[IOObject]) =

  for(fileObject <- fileObjects
      if(fileObject.isInstanceOf[FileObject])
      if(matches(fileObject.name)))
    yield fileObject

}

object FilterChecker{

  def apply(filter: String)=new FilterChecker(filter)
}
FileConverter.scala

package fileSearcher

import java.io.File

object FileConverter {
def convertToIOObject(file: File){
  if(file.isDirectory()) DirectoryObject(file)
  else FileObject(file)
}
}
斯卡拉匹配器

package fileSearcher

import java.io.File

class Matcher(filter:String,rootLocation:String) {
val rootIOObject=FileConverter.convertToIOObject(new File(rootLocation))

def execute()={
  val matchedFiles= rootIOObject  match {
    case file : FileObject if FilterChecker(filter) matches file.name =>List(file)  //error 1
    case directory: DirectoryObject => ???    //error 2
    case _ => List()

  }
  matchedFiles map(iOObject => iOObject.name) 
 }
}
上面的代码给了我2个错误

scrutinee is incompatible with pattern type; found : fileSearcher.FileObject required: Unit
scrutinee is incompatible with pattern type; found : fileSearcher.DirectoryObject required: Unit
谁能解释一下我做错了什么,我该如何解决


谢谢

您缺少一个等号:

def convertToIOObject(file: File) = {
                                  ^
                                  here

如果没有它,编译器会假定该方法返回
Unit
,这就是
match
语句被混淆的原因:它不能是
FileObject
DirectoryObject
,如果它必须是
Unit
,请解释原因?您需要提供更多信息。给出一个小但充分解释的例子。如何定义
converttooobject
FileObject
FilterChecker
DirectoryObject
等?如果没有这一点,就不可能判断代码的对错。例如,我可以为所有那些使代码可以正常编译的东西建立定义。@dhg更新了我的问题
def convertToIOObject(file: File) = {
                                  ^
                                  here