gpt4 book ai didi

scala - 我什么时候应该在 Scala 中创建带有隐式参数的方法?

转载 作者:行者123 更新时间:2023-12-04 17:10:47 27 4
gpt4 key购买 nike

我在 Scala 中使用 play 框架制作了如下所示的代码:

object Application extends Controller {
def hoge = Action( implicit request =>
val username = MyCookie.getName.get
Ok("hello " + username)
}
}

object MyCookie {
def getName( implicit request: RequestHeader ) = {
request.cookies.get("name").map(_.value)
}
}

我收到了同事的代码审查。他说这段代码因为隐式参数不可读。我无法回应他的意见。那么您能告诉我使用隐式参数的最佳方法是什么吗?什么时候应该使用隐式参数?

最佳答案

当几乎总有一种“正确”的做事方式时,您应该使用隐式参数,而您几乎总是想忽略这些细节;或者当经常没有办法做事情时,隐式为那些工作的事情提供了功能。

对于第一种情况的示例,在 scala.concurrent.Future 中,几乎每个方法都采用隐式 ExecutionContext .你几乎从不关心你的 ExecutionContext是从调用到调用;你只是想让它工作。但是当您需要更改执行上下文时,您可以将其作为显式参数提供。

有关第二种情况的示例,请查看 CanBuildFrom s 在收藏库中。你不能用任何东西 build 任何东西;提供了某些功能,并且缺少隐含的功能,例如,让您打包一堆 Vector[Option[String]] s 成 HashSet[Char]是使库保持强大、灵活而又理智的一种主要方式。

你什么都不做:显然你只是用它来节省一个地方的一点打字,而牺牲另一个地方。而且,在这种情况下,这样做会使事情的工作原理变得不那么明显,因为您必须四处查看以找出隐式请求实际使用的位置。如果您想节省输入,最好使用简短的变量名称,但要明确说明:

Action{ req => val name = MyCookie.getName(req).get; Ok("hello "+name) }

关于scala - 我什么时候应该在 Scala 中创建带有隐式参数的方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15248022/

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