如何用部分应用函数定义类方法?

时间:2015-06-20 02:43:35

标签: scala

我想用部分应用的方法定义类的方法。如果没有完全应用该方法,这可能吗?

这是我最好的镜头:

def getFile1(arg1: String) (implicit execution: ExecutionContextExecutor): Future[File] =
  getFile("file 1")_

def getFile2(arg1: String) (implicit execution: ExecutionContextExecutor): Future[File] =
  getFile("file 2")_

def getFile(fileName: String)(arg1: String)(implicit execution: ExecutionContextExecutor): Future[File] = //...

虽然不是使getFile1(arg1)getFile('file 1', arg1)等效,但Scala会尝试评估getFile("File 2")_并发现错误,因为getFile("File 2")_的类型是函数,而不是文件。

1 个答案:

答案 0 :(得分:3)

错误是正确的。 getFile("..")_是方法内部的表达式(评估为部分函数),而不是&#39;方法定义&#39;。< / p>

如下所示将其写出来应该更清楚:

def getFile2(arg1: String) (implicit execution: ExecutionContextExecutor): Future[File] = {
  return getFile("file 2")_
}

getFile("file 2")(arg1)对比,html, body{ margin: 0; padding: 0; } .fixed-top{ height: 50px; background-color: #5cb85c; } .fluid-center{ height: calc(100vh - 150px);/*using viewport units*/ background-color: indianred; overflow: auto; } .fixed-bottom{ height: 100px; background-color: #269abc; }具有Future [File]的预期表达类型/结果。

如果希望方法返回部分应用的函数,则将返回类型从Future [File]更改为适当的值。 (或者让类型推断做它将会做的事情。)