[英]How to accept all types except Future in definition of method in Scala?
[英]How to return different future types in scala for a method
嗨,我是 Scala 的新手,我被困在一個地方,正如 belore 所解釋的那樣。
def saveVariable(mappings: Seq):Future[SomeClass] =
if(mappings.nonEmpty) {
// a method is called that return a Future[SomeClass]
} else Future.sucessfull(()) // need to return a empty future or
在其他部分我不想做任何事情。 我只想在映射為非空時執行操作。
但是如果我做這樣的事情,顯然編譯器會抱怨其他部分的返回類型不匹配。
我怎么解決這個問題 ??
想想你的用戶,應該如何他/她使用的結果saveVariabl
如果它可以是SomClass
或Unit
? 您必須明確該行為,因此存在Either[L, R]
。
def foo[T](mappings: Seq[T]): Future[SomeClass] =
???
def saveVariable[T](mappings: Seq[T]): Future[Either[Unit, SomeClass]] =
if(mappings.nonEmpty)
foo(mappings).map(sc => Right(sc))
else
Future.sucessfull(Left(()))
此外,由於Unit
的Left基本上沒有意義,請考慮使用Option[T]
作為@ale64bit 建議。
def saveVariable[T](mappings: Seq[T]): Future[Option[SomeClass]] =
if(mappings.nonEmpty)
foo(mappings).map(sc => Some(sc))
else
Future.sucessfull(None)
Future.sucessful(())
具有Future[Unit]
類型(因為()
具有類型Unit
),它與返回類型Future[SomeClass]
不匹配。 您沒有提供SomeClass
,因此您需要返回Future.successful(new SomeClass())
或類似的東西,它實際上具有預期的類型。
如果您想返回有時丟失的值,請考慮返回Future[Option[SomeClass]]
並且在 else 分支中您可以返回Future.successful(None)
。 但是,對於另一種情況,您需要使用Some()
包裝返回值。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.