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

这是什么样的Scala构造?

发布时间:2020-12-16 09:07:05 所属栏目:安全 来源:网络整理
导读:有时当你刚学习一门新语言时,很难找到一个非常基本的答案,因为搜索关键词要么非常简单(导致太多不相关的搜索结果),要么我不知道要使用哪些关键词. 我正在观看Jetbrains的第一部关于他们使用Scala的IntelliJ功能的电影(https://www.youtube.com/watch?v=UJe4w
有时当你刚学习一门新语言时,很难找到一个非常基本的答案,因为搜索关键词要么非常简单(导致太多不相关的搜索结果),要么我不知道要使用哪些关键词.

我正在观看Jetbrains的第一部关于他们使用Scala的IntelliJ功能的电影(https://www.youtube.com/watch?v=UJe4wPUtcUQ#t=235).在此框架中,您会看到以下代码:

test("Email with valid address") {
    val email = Email("name@gmail.com")
    assert(email.address != null)
}

这看起来很奇怪(来自Java)并且查看Scalatest.FunSuite的API文档我看到Funsuite是一个功能测试套件,但我无法在FunSuite(http://doc.scalatest.org/2.2.1/index.html#org.scalatest.FunSuite)的文档中找到函数测试.

我的猜测是函数测试以某种方式要求你在它之后定义一个匿名函数,但这是什么意思?测试返回什么?如果不在FunSuite课程中,我在哪里可以找到API测试文档?

解决方法

您应该阅读的区域是Scala支持将函数作为参数传递给其他函数.你正在看的是一个函数的Scala语法,它返回一个函数,该函数又将另一个函数作为一个参数(多么令人满意!).有些代码会更清晰,原始的Scala代码是:

test("Email with valid address") {
    val email = Email("name@gmail.com")
    assert(email.address != null)
}

这是一样的

test("Email with valid address")( {
    val email = Email("name@gmail.com")
    assert(email.address != null)
} )

注意额外的括号,暗示代码块作为另一个函数的参数过去.

为了使这更具体一点,在Java中我们可能会看到这样:

test("Email with valid address").apply( new Function0() {
    public void invoke() {
        val email = Email("name@gmail.com")
        assert(email.address != null)    
    }
}

或者在Java 8中

test("Email with valid address").apply( 
    () -> {
        val email = Email("name@gmail.com")
        assert(email.address != null)    
    }
}

请注意,Scala变体非常简洁,旨在支持语言本身的扩展.因此,库可以创建看起来像语言级语法的API.

有关更多信息,以下两篇博客文章将非常有用:defining custom control structures和by name parameter to function

(编辑:李大同)

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

    推荐文章
      热点阅读