【发布时间】:2013-08-02 12:14:43
【问题描述】:
这纯粹是一个编码风格的问题。
我正在调用的函数返回Option,如果它等于None,我想采取特定操作。
例如,假设我正在尝试在启动时创建一个默认用户(如果它尚不存在)。我会调用一个函数来尝试查找与默认用户匹配的用户,并返回Option[User]。
如果返回值为None,我想运行一些用户创建代码。如果没有,我就完了。
我想知道最惯用的 Scala 语法是什么。到目前为止我所拥有的是:
def getUser(name: String): Option[User] = ...
getUser("admin") getOrElse createUser("admin", "ChangeThisNow!")
getUser("admin") match {
case None => createUser("admin", "ChangeThisNow!")
case _ =>
}
if(getUser("admin") == None) createUser("admin", "ChangeThisNow!")
第一个解决方案似乎是最实用的解决方案,但我不禁觉得可能有更好的解决方案 - 可能通过使用部分应用的功能,我承认我仍然有点模糊。
【问题讨论】:
-
绝对是
getOrElse。实际上,您也可以对生成的用户做一些事情。 -
我会使用
getOrElse。如果由于某种原因必须使用条件,请使用.isEmpty而不是== None。 -
我通常把这些问题带到codereview.stackexchange.com
-
@JasonG 没有意识到这存在。你是对的,当然,我会从现在开始这样做。感谢您指出!
-
没有人提到
getUser(name) orElse createUser(name)创建返回选项;不过当然大家心里想的是:getUser(name).fold(createUser(name))(identity).
标签: scala coding-style