2012-07-12 115 views
2

不知道该怎么称呼这个选项,它可以和任何一个一样好,我需要处理第三种情况。scala既不&也不处理

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)) 

我可以getOrElse这一切在一起,但宁愿干净的东西不管用户或管理员作为用户的情况如何,操作都是相同的。

回答

10

不getOrElse,只是否则容易

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)) 
+0

+1不错,那最好不过了。 – virtualeyes 2012-07-12 01:00:02

相关问题