2017-09-08 2 views
3

Ich frage mich, ob es möglich ist, den Rückgabetyp eines Funktionsliterals anzugeben. Zum Beispiel habe ichGibt es eine Möglichkeit, den Rückgabetyp eines Scala-Funktionsliterals anzugeben?

(x:Int) => x * 2 // scala infers the type Int => Int 
((x:Int) => Double) => x * 2 // does NOT compile 

Ich weiß, dass Scala Typinferenz tun wird den Rückgabetyp zu finden, aber ich würde ausdrücklich gerne den Typen angeben, so dass der Compiler früher den Fehler abfängt.

Natürlich habe ich die Prüfung durch

zwingen kann
val a: Int => Int = (x: Int) => x * 2 

Aber ist es möglich, wörtliche direkt auf eine Funktion angeben?

+4

'(x: Int) => x * 2.0'? Oder '(x: Int) => (x * 2): Double' – Dima

+5

Sie können sogar Typbezeichnung auf Blöcke in geschweiften Klammern verwenden:' (x: Int) => {... Tonnen Code ...}: Double ' –

+1

perfekt, danke, das ist genau das, was ich suchte, ich konnte es nicht herausfinden. Mach es zur Antwort und ich werde es akzeptieren! – ecerulm

Antwort

0

"Angeben des Typs" heißt type ascription. Wenn also die Funktionsliteral Typ sein sollte Int => Double (nehmen Sie einen Int-Parameter und geben einen Doppel), dann können Sie es wie folgt angeben:

(x: Int) => { x * 2.0 }:Double 

Wie erwähnt Scala Inferenz tut Typ so wird der Typ Zuschreibung nicht wirklich nötig, Aber wenn Sie den Typüberprüfer auf den beabsichtigten Typ "hinweisen" möchten, können Sie es tun. Wie in der Dokumentation erwähnt, wird die Beschreibung jedoch nicht häufig verwendet.

Verwandte Themen