scala文件上传示例中的type关键字

时间:2017-09-06 07:40:04

标签: scala playframework-2.0

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

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)
}

我已从Play文件上传示例中复制了上述代码。我很难使用type关键字的语法。如果我说这样的话 type mytype = Int => String。我可以用它来说如下

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

但是基于我理解的内容,我完全丧失了方法handleFilePartAsFile中如何使用以下语法,它甚至意味着什么?

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

1 个答案:

答案 0 :(得分:1)

这个想法完全一样。你只需要一个类型参数(就像之前在类和方法中看到过的那样),可以用任何类型代替,例如FilePartHandler[File]FileInfo => Accumulator[ByteString, FilePart[File]],您可以将handleFilePartAsFile写为

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

您可以将带有参数的类型同义词视为从类型到类型的函数。