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

StackOverflow https://stackoverflow.com/questions/2088524

Вопрос

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

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, а только есть ли у него применение.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top