簡體   English   中英

在Scala中編寫此功能的更實用,更簡潔的方法

[英]More functional and concise way to write this in Scala

我從(使用“播放操作”方法)開始:

    val foo = JPA.em.find(classOf[Foo], id)
    if (foo == null) NotFound("Bad Id") else Ok(Json.toJson(foo))

不喜歡它的必要性,我去了:

    Option(JPA.em.find(classOf[Foo], id)) match {
      case Some(foo) => Ok(Json.toJson(foo))
      case None => NotFound("Bad Id")
    }

功能更多,但更長。

對於該問題的一般性質,我深表歉意,但我敢肯定,答案可能對許多人有幫助。

Option(JPA.em.find(classOf[Foo], id)).map(foo=>Ok(Json.toJson(foo))).getOrElse(NotFound("Bad Id"))

絕對值得將不安全的Java API與這樣的可重用方法一起包裝,這些方法返回Option ,例如

def findOpt[T](cls: Class[T], id: Object): Option[T] =
  Option(JPA.em.find(cls, id))

使用此API而不是直接使用JPA,意味着您無需擔心代碼中其他地方的空檢查。 全部都集中在一個地方。

現在,您可以決定是否使用matchfoldmap / getOrElse ; 重要的是,結果的可能缺失以findOpt的類型findOpt

findOpt(classOf[Foo], id) map (foo => OK(Json.toJson(foo)) getOrElse NotFound("Bad Id")

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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