在scala文件上载示例中键入关键字

在scala文件上载示例中键入关键字,scala,playframework-2.0,Scala,Playframework 2.0,type FilePartHandler[A]=FileInfo=>acculator[ByteString,FilePart[A]] def handleFilePartAsFile: FilePartHandler[File] = { case FileInfo(partName, filename, contentType) => val perms = java.util.EnumSet.of(OWNER_READ, OWNER_WRITE) val att

type FilePartHandler[A]=FileInfo=>acculator[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)
}
我从播放文件上传示例中复制了上面的代码。我对
类型
关键字的语法很难理解。如果我说这样的话
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]]

想法完全一样。您只需要有一个类型参数(就像您以前在类和方法上可能看到的那样),它可以被任何类型替换,例如,
FilePartHandler[File]
is
FileInfo=>acculator[ByteString,FilePart[File]]
,您可以将
handleFilePartAsFile
编写为

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

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

在平面英语中,它是否意味着“handleFilePartsAsFile”是一种采用另一种方法(命名或匿名)的方法,该方法的输入是“FileInfo”,输出为累加器。。。?如果我上面写的是正确的,那么在本例中,我们正在编写一个方法“handleFilePartAsFile”,它的块是一个匿名函数,满足我写的上述条件?不,它是一个返回函数(不是方法)的方法,该函数的输入是
FileInfo
。而且,
{case FileInfo(…)=>…}
定义了这样一个函数。是的,我把它写错了,所以在详细阐述您所写的内容时,
handleFilePartAsFile
是一个方法。此handleFilePartsAsFile返回一个函数。正是这个函数将FileInfo作为输入,并将累加器作为输出返回?@curiousengineer Yes.尊敬您。你太棒了!谢谢