我有一个功能可以将src
中的所有文件移动到tgt
。现在,我想添加第三个参数,例如,带有条件的函数数组,其中src
中的文件应排除在外。每个函数都应返回一个布尔值,指示是否应移动文件。函数应类似于:如果文件以“ _”开头,则不要移动。
如何在Scala中实现这种功能?
答案 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))
将运行所有条件并期望对所有条件都适用...容易得多:)