Можно ли указать тип возврата анонимной функции в Scala? - PullRequest
22 голосов
/ 18 января 2010

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

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

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

Ответы [ 3 ]

47 голосов
/ 18 января 2010
val x = () => { System.currentTimeMillis } : Long
29 голосов
/ 18 января 2010

По моему мнению, если вы пытаетесь прояснить ситуацию, лучше задокументировать ожидание по идентификатору x, добавив туда аннотацию типа, а не результат функции.

val x: () => Long = () => System.currentTimeMillis

Тогда компилятор обеспечит, чтобы функция справа соответствовала этому ожиданию.

9 голосов
/ 19 января 2010

Фабиан дал простой путь, но некоторые другие способы, если вам нравится микроуправление сахаром, включают:

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
}

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

...