部分関数を使用してメッセージを処理するクラスのクラス階層を定義したいと考えています。各クラスは、処理できないメッセージをそのスーパークラスに延期する必要があります。このようなもの:
type Respond = PartialFunction[String, String]
abstract class HandlesNothing {
def respond: Respond = Map.empty // the empty response. Handles nothing
}
class HandlesA extends HandlesNothing {
override def respond = { case "a" => "The letter A" } orElse super.respond
}
class HandlesAAndB extends HandlesA {
override def respond = { case "b" => "The letter B" } orElse super.respond
}
あなたはアイデアを得る。しかし、これを試してみると、次のエラーが表示されます
<console>:21: error: missing parameter type for expanded function
The argument types of an anonymous function must be fully known. (SLS 8.5)
Expected type was: ?
override def respond = { case "b" => "The letter B" } orElse super.respond
^
{...} ブロックの型を明示的に指定すると、次のように機能します。
class HandlesAAndB extends HandlesA {
override def respond = ({ case "b" => "The letter B" }:Respond) orElse super.respond
}
部分関数ブロックの型を明示的に指定せずにこれを達成する方法はありますか?