如何定义接受参数并返回值的函数def?

时间:2012-06-22 18:15:11

标签: scala functional-programming arguments function

我希望能够定义一个接受参数的函数(例如一个File对象),并返回一些东西(例如一个布尔值),然后将该函数(不是boolean!)传递给另一个函数并拥有接受函数调用发送的函数。

我的背景是Java,虽然我知道如何发送一个不接受任何参数并且在Scala中什么都不返回的函数,但我似乎无法在互联网上找到关于如何做到这一点的好解释。

我可以用Java实现该程序,但我真的想知道如何在Scala中实现它。

1 个答案:

答案 0 :(得分:3)

首先是一个示例函数(实际上是一个方法):

import java.io.File

def fileExists(file: File) = file.exists

以及将该函数(实际上是一个方法)作为参数传递给另一个函数的方法(实际上......你知道......):

def findFiles(files: Seq[File], predicate: (File) => Boolean) =
  files filter predicate

此方法接受序列的文件和过滤器序列,仅选择传递给定谓词的文件。在这种情况下,我们只返回现有文件:

findFiles(Seq(new File("a.txt"), new File("b.txt")), fileExists)

看看我们如何优雅地传递exists方法作为参数?或者,如果您想手动调用谓词:

def fileMatches(file: File, predicate: (File) => Boolean) =
  predicate(file)

旁注:“ ......实际上是一种方法

findFiles() 方法predicate 函数作为参数。但是fileExists()是一个方法 - 这是由于一种称为 eta-expansion 的机制 - 透明地将方法包装到函数中。