【问题标题】:Practical examples of use for Clojure's some-> macroClojure 的 some-> 宏的使用实例
【发布时间】:2013-05-03 11:37:26
【问题描述】:

Clojure 1.5 添加了新的线程宏,包括:

  • some->
  • some->>

更改日志中有这个人为的示例来说明 some-> 的工作原理:

user=> (defn die [x] (assert false))
#'user/die
user=> (-> 1 inc range next next next die)
AssertionError Assert failed: false  user/die (NO_SOURCE_FILE:65)
user=> (some-> 1 inc range next next next die)
nil

与其他程序员聊天时,我们发现很难为some-> 想出一个好的实用示例。您什么时候使用some-> 解决实际问题?

【问题讨论】:

    标签: clojure


    【解决方案1】:

    some-> 可用于“自动保护”一系列线程化的处理步骤,其中链中的某些部分(尤其是中间)可能会返回nil,这将导致更下游的逻辑故障。

    特定示例可能包括线程化 clojure 函数以及 java 互操作,您需要在其中防范空指针异常。

    【讨论】:

    • +1 用于提及 Java 互操作。这似乎是 some-> 的完美用途
    【解决方案2】:

    一个 GitHub 代码搜索出现了很多 examples

    【讨论】:

      【解决方案3】:

      clojuredocs.org page on some-> 有一些 some-> 示例*:

      (-> {:a 1} :b inc)
      ;; NullPointerException   clojure.lang.Numbers.ops (Numbers.java:942)
      
      (some-> {:a 1} :b inc)
      ;; nil
      

      * 双关语

      【讨论】:

        猜你喜欢
        • 2017-03-09
        • 1970-01-01
        • 1970-01-01
        • 2019-11-07
        • 2011-07-24
        • 1970-01-01
        • 1970-01-01
        • 2015-11-16
        • 1970-01-01
        相关资源
        最近更新 更多