2012-07-12 3 views
2

무엇을 부를지 잘 모르겠다. 옵션도 마찬가지로 적합 할 것이다. 제 3의 경우를 처리해야한다.scala 어느 쪽이든 & 둘 다 취급하지 않음

Scalaz 가능성이 이미 별도의 라이브러리없이, 하나는 간결하게 다음과 같은 간단한 경우 처리 할 수있는 방법을 알고이 같은 것을 제공하지만 궁금 :

나는 사용자 세션이 존재하는지 확인해야을 실제 사용자 모두와 admin 로그인 시나리오로서, 후자는 이전 시나리오보다 우선 순위가 높습니다. 조건이 없으면 로그인 화면을 표시하십시오.

실제 사용자 세션 검사는 다음과 같습니다

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, 그냥 그게 더 나은, 귀하의 경우

request.session.get(Security.username) orElse request.session.get(Security.impersonate) map { id=> 
    f(Success(id.toInt, request)) 
} getOrElse(onFail(request)) 
+0

+1 좋은를 그래서

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) 

을 OrElse라는. – virtualeyes

관련 문제