斯卡拉 – 对守卫的理解
发布时间:2020-12-16 18:04:27 所属栏目:安全 来源:网络整理
导读:如果有警卫,我如何用于理解? type Error = String type Success = String def csrfValidation(session:Session,body:JsValue):Either[Error,Success] = { val csrfRet = for (csrfSession - csrfStateSessionValidation(session).right; csrfReq - csrfStat
如果有警卫,我如何用于理解?
type Error = String type Success = String def csrfValidation(session:Session,body:JsValue):Either[Error,Success] = { val csrfRet = for (csrfSession <- csrfStateSessionValidation(session).right; csrfReq <- csrfStateReqBodyValidation(body).right if (csrfSession == csrfReq)) yield (csrfReq) if (csrfRet.isRight) Right(csrfRet) else { Logger.warn("request and session csrf is not the same") Left("Oops,something went wrong,request and session csrf is not the same") } } 使用它时出现此错误. 'withFilter' method does not yet exist on scala.util.Either.RightProjection[Error,Success],using `filter' method instead 编辑: [error] type mismatch; [error] found : Option[scala.util.Either[Nothing,controllers.ProfileApiV1.Success]] [error] required: scala.util.Either[?,?] [error] csrfReq <- csrfStateReqBodyValidation(body).right if (csrfSession == csrfReq)) yield (csrfReq) EDIT2 This is what I did to fix above error. I also move if-guard to later process. val result = for { foo <- Right[String,String]("teststring").right bar <- Right[String,String]("teststring").right } yield (foo,bar) result fold ( ex => Left("Operation failed with " + ex),v => v match { case (x,y) => if (x == y) Right(x) else Left("value is different") } ) 解决方法
我相信你所看到的是编译器警告而不是实际错误. RightProjection不支持withFilter,这是保护条件的“首选”(但尚未要求),因此使用普通的旧过滤器.至于这些功能的区别及其产生的原因,请查看下面的链接以获得解释.
http://scala-programming-language.1934581.n4.nabble.com/Rethinking-filter-td2009215.html#a2009218 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |