gpt4 book ai didi

clojure - clojure 中的 take-while 和 take-nth

转载 作者:行者123 更新时间:2023-12-01 12:38:43 25 4
gpt4 key购买 nike

我正在尝试从队列中获取 n 条消息(使用 langohr)。我有一个工作版本,但我想知道是否有更好的 clojurist 方法来做到这一点:

(def not-nil? (complement nil?))

(defn get_message [queue]
(let [[_ payload] (lb/get ch queue)]
(if (not-nil? payload)
(String. payload "UTF-8"))))


(take 4 (take-while not-nil? (repeatedly (partial get_message "my_queue"))))

所以只要队列中有消息,我就最多提取 N 条消息。

有没有更好的 clojurist 方法来做到这一点?

最佳答案

not-nil? 与 clojure 1.6 中的内置函数 some? 相同

习惯用法是在 Clojure 绑定(bind)名称中优先使用 - 而不是 _

(partial get_message "my_queue")#(get-message "my_queue") 更好,因为您显然无意添加参数

(if (some? payload) (String.payload "UTF-8"))

可以表示为

(some-> payload (String. "UTF-8")),

虽然您可能想保留 some-> 用于更长的链接,但在这种情况下它仍然更简洁。

所以,把这些放在一起:

(defn get-message [queue]
(let [[_ payload] (lb/get ch queue)]
(some-> payload (String. "UTF-8"))))

(take 4 (take-while some? (repeatedly #(get-message "my_queue"))))

关于clojure - clojure 中的 take-while 和 take-nth,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26969363/

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