初歩的な質問で申し訳ありませんが、私は Scala を初めて使用します。
次の Scala クラスがあります。
class Test {
class Request {def getValue(): String = {"request"}}
class Response {def getValue(): String = {"response"}}
case class MyRequest(message: String) extends Request
case class MyResponse(message: String) extends Response
val myFunction: (Request) => Response = doSomething
private val functions = scala.collection.mutable.Map[String, (Request) => Response](
"myFunction" -> myFunction
)
def doSomething(request: MyRequest): MyResponse = {
null
}
}
次のエラーでコンパイルに失敗します:
type mismatch;
found : Test.this.MyRequest => Test.this.MyResponse
required: Test.this.Request => Test.this.Response
val myFunction: (Request) => Response = doSomething
myFunction と関数の宣言を次のように変更すると機能します。
val myFunction: (MyRequest) => MyResponse = doSomething
private val functions = scala.collection.mutable.Map[String, (MyRequest) => MyResponse](
"myFunction" -> myFunction
)
しかし、これは私が望んでいるものではありません。さまざまな具体的な型 (すべて Request または Response を拡張する) を持つ他の関数をマップに追加できるようにしたいと考えています。そのため、リクエストまたはレスポンスの任意のサブクラスを取得するマップを宣言したいと思います。
ここで何が間違っているのか分かりますか?