在 Scala 文件上传示例中键入关键字
type keyword in scala file upload exampe
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)
}
我从播放文件上传示例中复制了上面的代码。我很难使用 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]]
思路一模一样。您只有一个类型参数(就像您之前可能在 类 和方法上看到的那样)可以被任何类型替换,例如FilePartHandler[File]
是 FileInfo => Accumulator[ByteString, FilePart[File]]
你可以把 handleFilePartAsFile
写成
def handleFilePartAsFile: FileInfo => Accumulator[ByteString, FilePart[File]] = { ...
您可以将带有参数的类型同义词视为从类型到类型的函数。
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)
}
我从播放文件上传示例中复制了上面的代码。我很难使用 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]]
思路一模一样。您只有一个类型参数(就像您之前可能在 类 和方法上看到的那样)可以被任何类型替换,例如FilePartHandler[File]
是 FileInfo => Accumulator[ByteString, FilePart[File]]
你可以把 handleFilePartAsFile
写成
def handleFilePartAsFile: FileInfo => Accumulator[ByteString, FilePart[File]] = { ...
您可以将带有参数的类型同义词视为从类型到类型的函数。