簡體   English   中英

如何在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如果它可以SomClassUnit 您必須明確該行為,因此存在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(()))

此外,由於UnitLeft基本上沒有意義,請考慮使用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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM