Можно ли указать тип возврата анонимной функции в Scala?
Я знаю, что вы можете создать анонимную функцию и предоставить компилятору свой возвращаемый тип:
val x = () => { System.currentTimeMillis }
Просто для статического набора текста, можно ли также указать его тип возврата? Я думаю, что это сделает вещи намного яснее.
Ответы
Ответ 1
На мой взгляд, если вы пытаетесь сделать что-то более понятным, лучше документировать ожидание идентификатора x, добавляя там аннотацию типа, а не результат функции.
val x: () => Long = () => System.currentTimeMillis
Затем компилятор гарантирует, что функция в правой части соответствует этому ожиданию.
Ответ 2
val x = () => { System.currentTimeMillis } : Long
Ответ 3
Фабиан дал простой путь, но некоторые другие способы, если вам нравятся микроманипуляции сахара, включают:
val x = new (() => Long) {
def apply() = System.currentTimeMillis
}
или
val x = new Function0[Long] {
def apply() = System.currentTimeMillis
}
или даже
val x = new {
def apply(): Long = System.currentTimeMillis
}
так как в большинстве ситуаций это не имеет никакого значения, если оно происходит от функции, только если оно имеет применение.