考虑代码块.
class Evaluation {
def evaluate= {
println("Charlie...")
}
}
case class Dept(name:String) extends Evaluation
def depEval(name:String,f:(String) => Evaluation) ={
println(name)
f(name).evaluate
}
depEval("abc", Dept)
Run Code Online (Sandbox Code Playgroud)
为什么Dept可以作为Funtion1类型传递?是这样,Scala在解析参数之前不会检查类型.
考虑其他代码段
def matchingCase(f: String => Evaluation)= {
println(f.toString())
f match {
case Dept => println("function type matched")
}
}
matchingCase((x: String)=> Dept(x))
Run Code Online (Sandbox Code Playgroud)
而在上面的代码中scala给出了匹配错误,正如预期的那样.