gpt4 book ai didi

clojure - 如何获得调用 Java 方法的 Fn?

转载 作者:行者123 更新时间:2023-12-01 07:14:52 26 4
gpt4 key购买 nike

我正在学习 Clojure。我写了这段代码来递归地遍历一个目录。

(tree-seq #(.isDirectory %1) #(.listFiles %1) (File. "/my-directory"))

为什么我不能使用 .isDirectory作为 Clojure 中的一流函数?有没有更好的方法来重写这段代码?

最佳答案

Joost 认为 Java 方法不是一流的函数。

作为处理这个问题的一种方法,我通常喜欢将 Java 函数包装在一个 Clojure 函数中(或者找到一个已经这样做的库),然后很容易以惯用的一流方式使用它们:

(defn directory? [^java.io.File file]
(.isDirectory file))

(defn list-files [^java.io.File file]
(.listFiles %1))

(tree-seq directory? list-files (File. "/my-directory"))

这是多几行代码,但具有以下优点:
  • 您可以在函数中添加类型提示以避免反射(如上所述)
  • 最终代码更简洁更地道
  • 您已经从底层 Java 互操作中抽象出来
  • 关于clojure - 如何获得调用 Java 方法的 Fn?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13229375/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com