Можно ли указать тип возвращаемого значения анонимной функции в Scala?
-
21-09-2019 - |
Вопрос
Я знаю, что вы можете создать анонимную функцию и заставить компилятор определить тип ее возвращаемого значения:
val x = () => { System.currentTimeMillis }
Можно ли также указать тип возвращаемого значения ради статической типизации?Я думаю, это многое прояснило бы.
Решение
На мой взгляд, если вы пытаетесь прояснить ситуацию, лучше задокументировать ожидание идентификатора x, добавив туда аннотацию типа, а не результат функции.
val x: () => Long = () => System.currentTimeMillis
Затем компилятор гарантирует, что функция в правой части соответствует этому ожиданию.
Другие советы
val x = () => { System.currentTimeMillis } : Long
Фабиан предложил простой способ, но если вам нравится микроменеджмент сахара, есть и другие способы:
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
}
поскольку в большинстве ситуаций не имеет значения, происходит ли он от Function, а только есть ли у него применение.
Не связан с StackOverflow