Scala scrutinee与模式类型不兼容;找到:package.SomeObject所需对象:Unit
我正在试用scala中的文件搜索程序 FileChecker.scalaScala 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
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