scala - Scala:如何在复制文件的函数上动态指定条件
问题描述
我有一个功能可以将所有文件移动src
到tgt
. 现在我想添加第三个参数,例如一个函数数组,其中包含src
应排除哪些文件的条件。每个函数都应该返回一个布尔值,指示文件是否应该被移动。函数应该类似于:如果文件以“_”开头,则不要移动。
这样的事情如何在scala中实现?
解决方案
我想您可以利用作为第一公民的功能的优势:
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))
这将运行所有条件并期望对所有条件都适用......容易得多:)
推荐阅读
- python - 修改数据框子集不会更改源
- php - 如果用户未选中复选框,则将 DATE 提交到数据库,如果用户已选中,则将提交当前日期
- elasticsearch - 如何为 Kibana 中的不同字段使用一个通用过滤器?
- influxdb - 如何启动 influxdb 2.0.2?
- mysql - GROUP BY 非标准 MySQL 到标准 SQL
- linux - 获取进程信息(当前进程、父进程、最早的子进程)
- javascript - 使用 JQuery 将数据附加到 html 表
- python - 如何在 IDE (PyCharm) 中添加和使用包含 OpenCV-Contrib 的新版本的 OpenCV?
- javascript - 使用 Promise.all 在 TypeScript 中返回数组后无法在 void 上调用数组方法
- c++ - 转换为提取运算符的右操作数 (>>)