scala - 被审查者与模式类型不兼容;找到 : package. SomeObject required: Unit

标签 scala pattern-matching sbt case

我正在 Scala 中尝试文件搜索器程序。

文件检查器.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)
}

IOObject.scala
package fileSearcher
import java.io.File
trait IOObject {
  val file:File
  val name= file.getName()
}

case class FileObject(file: File)extends IOObject
case class DirectoryObject(file: File)extends IOObject

文件转换器.scala
package fileSearcher

import java.io.File

object FileConverter {
def convertToIOObject(file: File){
  if(file.isDirectory()) DirectoryObject(file)
  else FileObject(file)
}
}

匹配器.scala
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声明很困惑:它不能是 FileObjectDirectoryObject如果它必须是 Unit .

关于scala - 被审查者与模式类型不兼容;找到 : package. SomeObject required: Unit,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28839590/

相关文章:

oop - 模式匹配驱动的逻辑在现实应用中的外观如何?

scala - 为子项目交叉编译具有不同 crossScalaVersions 的聚合项目

playframework - 自动设置发布版本而不提示用户 - sbt-release

scala - 如何在多项目 sbt 设置中包含 lib 下的 jar?

Scala:抽象隐式参数中的路径相关类型

functional-programming - OCaml "with"保护模式匹配

javascript - 匹配以特定单词开头和结尾的所有摘录

java - 仅在运行jar文件时发生空指针异常 - Scala Spark

Scala-IDE/IntelliJ::对 Scala、Play 等的模板支持

scala - 如何通过 1 的位置列表解码 0 和 1 的列表?