簡體   English   中英

scala Either&Both the handling

[英]scala Either & Neither handling

不知道該怎么稱呼它,選擇適合和任何一個,我需要處理第三種情況,無論如何。

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,只是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) ) 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM