加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

我应该何时在Scala中使用隐式参数创建方法?

发布时间:2020-12-16 18:42:44 所属栏目:安全 来源:网络整理
导读:我使用 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: Requ
我使用 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从调用到调用是什么;你只是想让它发挥作用.但是当您需要更改执行上下文时,您可以将其作为显式参数提供.

有关第二种情况的示例,请查看集合库中的CanBuildFroms.你不能从任何东西建造任何东西;提供了某些功能,并且缺少一个隐含的,比如说,允许你将一堆Vector [Option [String]]打包成一个HashSet [Char],这是保持库强大而灵活而且理智的一种主要方式.

你没有做任何事情:显然你只是用它来节省一点点打字而牺牲另一点.而且,在这种情况下,这样做会使事情变得不那么明显,因为你必须遍布整个地方找出实际使用隐式请求的位置.如果你想保存输入,你最好使用短变量名,但要明确它:

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读