2017-09-06 2 views
0

type FilePartHandler[A] = FileInfo => Accumulator[ByteString, FilePart[A]]Typ Stichwort in scala Datei-Upload exampe

def handleFilePartAsFile: FilePartHandler[File] = { 
    case FileInfo(partName, filename, contentType) => 
    val perms = java.util.EnumSet.of(OWNER_READ, OWNER_WRITE) 
    val attr = PosixFilePermissions.asFileAttribute(perms) 
    val path = Files.createTempFile("multipartBody", "tempFile", attr) 
    val file = path.toFile 
    val fileSink = FileIO.toFile(file) 
    val accumulator = Accumulator(fileSink) 
    accumulator.map { case IOResult(count, status) => 
     FilePart(partName, filename, contentType, file) 
    }(play.api.libs.concurrent.Execution.defaultContext) 
} 

ich den obigen Code aus WIEDG.DATEI Beispiel laden kopiert haben. Ich habe eine harte Zeit mit der Syntax type Schlüsselwort. Wenn ich so etwas sage type mytype = Int => String. Ich kann es wie sagen verwende unter

def method2(f:mytype) = "20" 
def f(v:Int) = "hello" 
method2(f) 

Aber ich basierend auf, was ich verstehe, ich bin bei Totalverlust, wie die folgende Syntax wird handleFilePartAsFile in dem Verfahren verwendet wird, und was bedeutet es auch bedeuten?

type FilePartHandler[A] = FileInfo => Accumulator[ByteString, FilePart[A]] 

Antwort

1

Die Idee ist genau die gleiche. Sie haben nur einen Typparameter (wie Sie wahrscheinlich schon bei Klassen und Methoden gesehen haben), der durch irgendeinen Typ ersetzt werden kann, also z.B. FilePartHandler[File] ist FileInfo => Accumulator[ByteString, FilePart[File]] und man konnte handleFilePartAsFile als

def handleFilePartAsFile: FileInfo => Accumulator[ByteString, FilePart[File]] = { ... 

Sie können vom Typ Synonyme mit Parametern wie Funktionen von Typen Typen denken schreiben.

+0

In Ebene Englisch bedeutet es "handleFilePartsAsFile" ist eine Methode, die eine andere Methode (ob benannt oder anonym) und die Eingabe für diese Methode ist "FileInfo" mit der Ausgabe als Akkumulator ...? Und wenn das, was ich oben geschrieben habe, korrekt ist, dann schreiben wir in dem vorliegenden Beispiel eine Methode "handleFilePartAsFile", deren Block eine anonyme Funktion ist, die die oben genannten Kriterien erfüllt, die ich geschrieben habe? – curiousengineer

+0

Nein, es ist eine Methode, die eine Funktion (keine Methode) _returnns_ zurückgibt, und die Eingabe für diese Funktion ist 'FileInfo'. Und '{case FileInfo (...) => ...}' definiert eine solche Funktion. –

+0

Ja, ich habe es falsch formuliert, so auf das, was Sie geschrieben haben, "handleFilePartAsFile" ist eine Methode. Diese HandleFilePartsAsFile gibt eine Funktion zurück. Es ist diese Funktion, die FileInfo als Eingabe nimmt und Akkumulator als Ausgabe zurückgibt? – curiousengineer