我正在尝试使用 case 语句实现一个方法,但以下代码无法编译。
我知道我可以通过使用模式匹配来完成这项工作,但我很好奇为什么 case 语句作为直接实现不兼容......
trait Calculation[Input, Result] {
def calculate(in: Input): Result
}
class CalculationImpl : Calculation[String, int] {
// missing parameter type for expanded function
// The argument types of an anonymous function must be fully known. (SLS 8.5)
def calculate = {
case "one" => 1
case "two" => 2
case s: String => 0
}
}
作为折衷方案,我可以更改 trait 的语义,使其calculate
成为返回 a 的无参数方法Function1
,而不是采用Input
参数并返回 a 的方法Result
。然而,这并不理想……
trait Calculation[Input, Result] {
def calculate: Input => Result // Works, but semantics have changed.
}
class CalculationImpl : Calculation[String, int] {
def calculate = {
case "one" => 1
case "two" => 2
case s: String => 0
}
}
(注意:以上是伪代码 - 我没有尝试编译这个确切的代码)