scala Either&既不处理

时间:2012-07-12 00:04:10

标签: scala either

不知道该怎么称呼它,选择适合和任何一样,我需要处理第三种情况。

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

我可以将它们全部放在一起但是更愿意清理一下,无论用户或管理员用户的情况如何,操作都是一样的。

1 个答案:

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