【问题标题】:Take-while and take-nth in clojureclojure 中的 Take-while 和 take-nth
【发布时间】:2014-11-17 09:25:18
【问题描述】:

我正在尝试从队列中获取 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 方法来做到这一点?

【问题讨论】:

    标签: clojure rabbitmq take


    【解决方案1】:

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

    习惯用法是在 Clojure 绑定名称中使用 - 而不是 _

    (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"))))
    

    【讨论】:

    • 我正在尝试在我的本地主机上使用 RabbitMQ,但使用起来很困难,您能给我一些关于此的指示
    • @PankajNimgade 你能描述更多你的问题吗?
    猜你喜欢
    • 2012-01-21
    • 1970-01-01
    • 2018-07-17
    • 2015-09-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-05
    相关资源
    最近更新 更多