【问题标题】:How to chain function calls in Clojure?如何在 Clojure 中链接函数调用?
【发布时间】:2021-08-01 13:48:09
【问题描述】:

假设我有一个字符串,我想按如下方式进行转换:

  1. 删除所有空格。
  2. 删除所有点。
  3. 将字符串设为小写。

一种方法是这样的:

(defn my-function
  [s]
  (let
      [
        clean-string1 (clojure.string/replace s " " "")
        clean-string2 (clojure.string/replace clean-string1 "." "")
        clean-string3 (clojure.string/lower-case clean-string2)
       ]
    ;; ...
    )
  )

如何“链接”函数 clojure.string/replaceclojure.string/lower-case 以便

  1. (clojure.string/replace s " " "") 的输出被馈送到
  2. (clojure.string/replace clean-string1 "." "") 并将其输出馈送到
  3. (clojure.string/lower-case clean-string2)

这样我就不需要中间变量clean-string1clean-string2

【问题讨论】:

    标签: clojure


    【解决方案1】:

    您只需按照使用任何语言的方式进行操作即可。您要求函数组合,在数学或非 lisp 语言中看起来像 f(g(x))。在 lisp 中当然是(f (g x)),但原理是一样的。

    (require '[clojure.string :as s])
    (s/lower-case (s/replace (s/replace s " " "") "." ""))
    

    是最直接的答案。但是这种嵌套级别是相当不愉快的

    (-> s
        (s/replace " " "")
        (s/replace "." "")
        (s/lower-case))
    

    这是同样的事情,但只是使用-> 来稍微调整一下表格以便清楚起见。

    【讨论】:

      猜你喜欢
      • 2022-01-16
      • 1970-01-01
      • 1970-01-01
      • 2017-10-14
      • 2018-03-08
      • 2013-09-04
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多