Подтвердить что ты не робот

Можно ли указать тип возврата анонимной функции в Scala?

Я знаю, что вы можете создать анонимную функцию и предоставить компилятору свой возвращаемый тип:

val x = () => { System.currentTimeMillis }

Просто для статического набора текста, можно ли также указать его тип возврата? Я думаю, что это сделает вещи намного яснее.

4b9b3361

Ответ 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
}

так как в большинстве ситуаций это не имеет никакого значения, если оно происходит от функции, только если оно имеет применение.