繁体   English   中英

Scala函数字面混乱

[英]scala function literal confusion

我已经进行了单元测试来研究Scala函数的文字格式,并发现它很混乱,请您帮我理解不同语法的含义吗?

@Test def supplierLiteral: Unit = {
    object Taker {

        def takeFunctionLiteral(supplier: => Int): Unit = {
            println("taker takes")
            //              println(supplier.apply()) //can't compile
            println(supplier)
        }

        def takeExplicitFunction0(supplier: () => Int): Unit = {
            println("taker takes")
            println(supplier())
        }
    }

    val give5: () => Int = () => {
        println("giver gives")
        5
    }


    println(give5.isInstanceOf[Function0[_]])

    Taker.takeFunctionLiteral(give5) //can't compile, expected Int
    println()
    Taker.takeExplicitFunction0(give5)
}

为什么takeFunctionLiteral println(suppiler.apply())takeFunctionLiteral语法不正确? 两者都不相等吗? 之间有什么区别

supplier: () => Int

supplier: => Int

提前致谢。

这里的supplier: () => Int supplier的类型是Function0[Int] 但是,这里supplier: => Int了类型supplier是一个Int

supplier: => Int (a)和supplier: Int (b)之间的区别在于,如果(a)供应商参数按名称传递到函数中并且仅当从内部函数访问时才进行评估。 在情况(b)中,在调用函数的行上评估供应商参数。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM