Scala:如何在复制文件的函数上动态指定条件

时间:2019-02-15 14:35:52

标签: scala

我有一个功能可以将src中的所有文件移动到tgt。现在,我想添加第三个参数,例如,带有条件的函数数组,其中src中的文件应排除在外。每个函数都应返回一个布尔值,指示是否应移动文件。函数应类似于:如果文件以“ _”开头,则不要移动。

如何在Scala中实现这种功能?

1 个答案:

答案 0 :(得分:2)

我想您可以利用拥有第一位公民职能的优势:

def method(src: String, tgt: String, filters: List[File => Boolean])

然后,您可以传递要用作过滤器的任何函数。

method("path/to/folder", "path/to/destination", List(_.getPath.startsWith("_")))

在列表中指定类型,您可以轻松地写入值:

List[File => Boolean](
  _.getPath.startsWith("_"),
  _.getName.contains("foobar")
)

该方法应使用运行所有功能,并期望所有功能都为true。为此,您可以查看“减少”列表

filters.reduce[File => Boolean] { case (a, b) =>
  file => a(file) && b(file)
}(yourFile)

如@LuisMiguelMejíaSuárez所述,在这种情况下使用forall更有意义:

filters.forall(p => p(file))

将运行所有条件并期望对所有条件都适用...容易得多:)