元々私は次のようなことがありました。スカラをリファクタリングして検索関数を引数として使用すると、Option [Any]が発行されます
private def getCurrentField[A](newState: Asset, currentState: Option[Asset], searchFunction: Asset => Option[A]) : Option[A] =
newState.content.flatMap(_.contract.flatMap(_.childSource)) orElse {
currentState match {
case Some(state) => searchFunction(state)
case None => None
}
}
val getCollection : Asset => Option[Collection] = (state : Asset) => state.assetGroup.flatMap(_.collection)
val getChildSource : Asset => Option[String] = (state : Asset) => state.content.flatMap(_.contract.flatMap(_.childSource))
...しかし、これは私のコンパイラエラーを与える:
私は次のようにそれを単純化し、いくつかの作業の後にそうprivate def getCollection(newState: Asset, currentState: Option[Asset]) =
newState.assetGroup.flatMap(_.collection) match {
case Some(collection) => Some(collection)
case None => currentState match {
case Some(state) => state.assetGroup.flatMap(_.collection)
case None => None
}
}
private def getChildSource(newState: Asset, currentState: Option[Asset]) =
newState.content.flatMap(_.contract.flatMap(_.childSource)) match {
case Some(childSource) => Some(childSource)
case None => currentState match {
case Some(state) => state.content.flatMap(_.contract.flatMap(_.childSource))
case None => None
}
}
private def getParentSource(newState: Asset, currentState: Option[Asset]) =
newState.content.flatMap(_.contract.flatMap(_.parentSourceId)) match {
case Some(childSource) => Some(childSource)
case None => currentState match {
case Some(state) => state.content.flatMap(_.contract.flatMap(_.parentSourceId))
case None => None
}
}
:それはボイラープレートの多くが含まれてい
[warn] <filename_removed>.scala:68: a type was inferred to be `Any`; this may indicate a programming error.
[warn] currentState match {
[warn] ^
[error] _:67: type mismatch;
[error] found : Option[Any]
[error] required: Option[A]
[error] newState.content.flatMap(_.contract.flatMap(_.childSource)) orElse {
[error] ^
[warn] one warning found
[error] one error found
戻り値の型をgetCurrentField
にすると、コンパイルされテストに合格しますが、コンパイラの警告:a type was inferred to be Any
が表示されます。
この場合、タイプパラメータを処理するにはどうすればよいでしょうか?
スカラでリファクタリングを行う場合は、必ず開始型コードに戻り型の注釈を追加することをお勧めします。 – Daenyth