これは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
}
は、それが適用されます。
を持っているかどうかだけ、機能から下降した場合、ほとんどの状況では違いはありませんので、所属していません StackOverflow