코드 블록을 고려하십시오.스칼라 함수가 함수 인수에 대문자 클래스 형식을 허용하는 이유는 무엇입니까?
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)
왜 Dept는 Funtion1 형식으로 전달 될 수 있습니까? 스칼라는 인수를 해결하기 전에 유형을 확인하지 않습니다.
예상대로 위의 코드 스칼라 반면
def matchingCase(f: String => Evaluation)= {
println(f.toString())
f match {
case Dept => println("function type matched")
}
}
matchingCase((x: String)=> Dept(x))
이 일치 오류를 제공 다른 조각을 고려하십시오.
동반자를 명시 적으로 정의하여이 동작을 깨기 쉽습니다. –
그 문제는 https://github.com/scala/bug/issues/3664입니다. –