gpt4 book ai didi

Scala代码揭开神秘面纱

转载 作者:行者123 更新时间:2023-12-04 03:09:16 25 4
gpt4 key购买 nike

有人可以揭露这段代码的神秘色彩,这是Play20框架中zentasks示例的一部分。我很好奇这是如何工作的,因为我是Java的Scala的新手,所以很多事情很难缠住我的头。

def IsAuthenticated(f: => String => Request[AnyContent] => Result) = 
Security.Authenticated(username, onUnauthorized) { user =>
Action(request => f(user)(request))
}

最佳答案

您需要对签名进行一些拆分。 f是一个函数,它接受尚未计算的字符串=> String并返回另一个接受Request[AnyContent]并返回结果的函数。
Security.Authenticated调用接受两个参数列表。一种具有usernameonUnauthorized的代码。第二个函数接受用户并返回一个 Action 。
Action.apply方法接受函数Request[AnyContent] => Result
因此,f以“curried”方式被调用。那就是第一个函数被调用,然后立即使用生成的函数f(user)(request)

这是丑陋的(至少,尽我所能)和丑陋的东西:

def isAuthenticated(f: => String => Request[AnyContent] => Result) =
Security.Authenticated(username, onUnauthorized) { user: String =>
Action.apply { request: Request[AnyContent] =>
val hiddenTmp: Request[AnyContent] => Result = f(user)
hiddenTemp.apply(request)
}
}

您可以看到编译器正在做一些工作来删除类型注释。希望这有助于解释它如何还原成原始scala。本质上,该功能执行许多功能组合。

关于Scala代码揭开神秘面纱,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8597028/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com