不知道该怎么称呼它,选择适合和任何一样,我需要处理第三种情况。
Scalaz可能已经提供了这样的东西,但我很想知道如果没有单独的库,可以简洁地处理以下简单的情况:
我需要检查用户会话是否存在,包括实际用户和管理员登录用户方案,后者优先于前者;如果两个条件都不存在,请显示登录屏幕。
实际的用户会话检查如下:
request.session.get(Security.username) map { id=>
f(Success(id.toInt, request))
} getOrElse( onFail(request) ) // onFail = show login
我需要在管理模拟用户案例中添加:
request.session.get(Security.impersonate) map { id=>
f(Success(id.toInt, request))
} getOrElse( onFail(request) )
我可以将它们全部放在一起但是更愿意清理一下,无论用户或管理员用户的情况如何,操作都是一样的。
答案 0 :(得分:10)
不是getOrElse,只是orElse
scala> val userName : Option[String] = None
userName: Option[String] = None
scala> val impersonate = Some("Fred")
impersonate: Some[java.lang.String] = Some(Fred)
scala> userName orElse impersonate
res0: Option[String] = Some(Fred)
scala> val userName = Some("George")
userName: Some[java.lang.String] = Some(George)
scala> userName orElse impersonate
res1: Option[java.lang.String] = Some(George)
所以在你的情况下
request.session.get(Security.username) orElse request.session.get(Security.impersonate) map { id=>
f(Success(id.toInt, request))
} getOrElse( onFail(request) )