Скала функция буквальная путаница

Я провел модульный тест для изучения буквенного формата функции 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 ответ

Вот supplier: () => Int тип supplier это Function0[Int], Но здесь supplier: => Int тип supplier является Int,

Разница между supplier: => Int (а) и supplier: Int (б) заключается в том, что в случае (а) параметр поставщика передается в функцию по имени и будет оцениваться только при доступе изнутри функции. В случае (b) параметр поставщика оценивается в строке, где вызывается функция.

Другие вопросы по тегам