【发布时间】:2013-03-29 00:22:02
【问题描述】:
我试图掌握“Scala 方式”工作的窍门,所以我想知道下面的代码是否是在这种情况下应该如何完成的事情。
所以我有实体用户和公司(使用 LiftWeb 映射器映射)。用户的 currentUser 包含一个 Option[User],而 Company 的 currentCompany 是一个 Option[Company]。为了比较当前用户是否是当前公司的所有者,我正在做类似的事情:
Company.currentCompany.map{_.owner.get == User.currentUser.map{_.id.get}.openOr(-1) }.openOr(false)
它有效,但不知何故感觉有点冗长。好吗?不是吗?有更好的想法吗? 谢谢!
【问题讨论】:
-
值得一提的是,currentUser 和 currentCompany 实际上是 Box 而不是 Option(Lift 对 Option 的扩展)。这就是我使用 openOr 而不是 getOrElse 的原因。然而,在这个简单的例子中,它是一样的。
-
所以
currentUser返回一个Option[User]和User.id返回一个Option[Int]和Company.owner返回一个Option[Int]? -
@huynhjl 为了完全正确,User.currentUser 返回 Box[User] 并且 User.id 返回 MappedLongIndex 并继续返回 Long。 Company.currentCompany 通过返回 Box[Company] 和 Company.owner 返回 MappedLongForeignKey 并继续返回 Long。