scala函数文字混乱

时间:2016-10-12 12:58:13

标签: scala function-literal

我已经进行了单元测试来研究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)
}

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

supplier: () => Int

supplier: => Int

提前致谢。

1 个答案:

答案 0 :(得分:0)

此处supplier: () => Int supplier的类型为Function0[Int]。 但是supplier: => Int这里supplier的类型是Int

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