【问题标题】:type keyword in scala file upload exampe在 scala 文件上传示例中键入关键字
【发布时间】:2018-02-14 14:29:53
【问题描述】:

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

我从播放文件上传示例中复制了上述代码。我很难使用typekeyword 的语法。如果我说这样的话 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]]

【问题讨论】:

    标签: scala playframework-2.0


    【解决方案1】:

    这个想法是完全一样的。您只有一个类型参数(就像您之前可能在类和方法上看到的那样),它可以被任何类型替换,例如FilePartHandler[File]FileInfo => Accumulator[ByteString, FilePart[File]] 你可以写成 handleFilePartAsFile

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

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

    【讨论】:

    • 在平面英语中,这是否意味着“handleFilePartsAsFile”是一种采用另一种方法(无论是命名还是匿名)的方法,并且该方法的输入是“FileInfo”,输出为累加器......?如果我上面写的是正确的,那么在手头的例子中,我们正在编写一个方法“handleFilePartAsFile”,它的块是一个满足我写的上述条件的匿名函数?
    • 不,这是一个返回函数(不是方法)的方法,该函数的输入是FileInfo。而{ case FileInfo(...) => ... }定义了这样一个函数。
    • 是的,我措辞错误,所以详细说明你写的内容,handleFilePartAsFile 是一种方法。这个 handleFilePartsAsFile 返回一个函数。就是这个函数把FileInfo作为输入,返回Accumulator作为输出?
    • @curiousengineer 是的。
    • 向您致敬。你太棒了!谢谢
    猜你喜欢
    • 2013-01-09
    • 1970-01-01
    • 2021-10-25
    • 2012-04-01
    • 1970-01-01
    • 2015-09-10
    • 1970-01-01
    • 2011-01-12
    • 1970-01-01
    相关资源
    最近更新 更多