É possível especificar o tipo de retorno de uma função anônima, em Scala?
-
21-09-2019 - |
Pergunta
Eu sei que você pode criar uma função anônima e fazer com que o compilador inferir seu tipo de retorno:
val x = () => { System.currentTimeMillis }
Apenas para a digitação estática, é possível especificar seu tipo de retorno também? Eu acho que deixaria as coisas muito mais claras.
Solução
Na minha opinião, se você estiver tentando tornar as coisas mais claras, é melhor documentar a expectativa no identificador X adicionando uma anotação de tipo lá, e não o resultado da função.
val x: () => Long = () => System.currentTimeMillis
Em seguida, o compilador garantirá que a função no lado direito atenda a essa expectativa.
Outras dicas
val x = () => { System.currentTimeMillis } : Long
Fabian deu o caminho direto, mas de algumas outras maneiras, se você gosta de microgerenciar açúcar, incluir:
val x = new (() => Long) {
def apply() = System.currentTimeMillis
}
ou
val x = new Function0[Long] {
def apply() = System.currentTimeMillis
}
ou até
val x = new {
def apply(): Long = System.currentTimeMillis
}
Como na maioria das situações, não faz diferença se descer da função, apenas se ela tem uma aplicação.