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

为什么在scala中的代码块之前给出了类名?

发布时间:2020-12-16 09:06:11 所属栏目:安全 来源:网络整理
导读:我是 scala的新手,经历了一些教程,我遇到过一个样本 object DataController extends SomeOtherController with Controller {... def testPage = SomeOtherAction { implicit requestHolder = val userInfo = requestHolder.user val paramMap = requestHolde
我是 scala的新手,经历了一些教程,我遇到过一个样本

object DataController extends SomeOtherController with Controller {
...
    def testPage = SomeOtherAction { implicit requestHolder =>
        val userInfo = requestHolder.user 
        val paramMap = requestHolder.params
        .....
    }
}

here = sign表示将以下代码块分配给名为testPage的函数.
但为什么在代码块之前给出了类名“SomeOtherAction”?
需要一些关于相同的指针.

解决方法

SomeOtherAction实际上是一个对象,而不是一个类,并且必须有一个apply方法.这个“代码块”不仅仅是一个块,它是一个采用requestHolder类型的函数.所以,SomeOtherAction可能就是这样

object SomeOtherAction {
  //...
  def apply(r:RequestHolder => Unit) = {
    // do something
    r(someRequestHolder) 
  }
}

当Scala看到一个参数应用于一个对象时,它会寻求方法apply.

上面单位的使用仅仅是一种可能情景的说明.

最后一个难题是,对于任何方法,包括apply,参数表达式可以用括号括起来,或者(如果只有1个)可以是单个块表达式,即用括号{}限定.这在功能应用程序语法的语言规范的6.6节中有详细说明:

SimpleExpr ::= SimpleExpr1 ArgumentExprs
ArgumentExprs ::= ‘(’ [Exprs] ‘)’
| ‘(’ [Exprs ‘,’] PostfixExpr ‘:’ ‘_’ ‘*’ ’)’
| [nl] BlockExpr
Exprs ::= Expr {‘,’ Expr}

例如def foo(x:Int)= x * 100可以通过foo(42)或foo {println(“yo”)调用; 42}

(编辑:李大同)

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

    推荐文章
      热点阅读