【问题标题】:Clojure partial rightClojure 偏右
【发布时间】:2015-12-15 09:34:32
【问题描述】:

我有以下功能

(defn fun [a b] (str a b))

(fun "1" "2") ;; --> "12"

感谢(partial) 我可以把它变成(fun b) 并有一个固定的a

(def fun2 (partial fun "1"))

(fun2 "2") ;; --> "12"

clojure 是否有类似 (partial-right) 之类的东西或一种重新排列函数参数的方法,以便我可以拥有一个固定的 b 而不是固定的 a,从而拥有函数 (fun a)

谢谢

【问题讨论】:

  • 因为最近在 irc 中被问到,所以没有。选项:#(fun % "2")
  • @cfrick 请注意,如果fun 不纯,则这不等同于partial(或某些相关构造);见this question
  • “有趣”? IE。 fn, @cfrick?
  • @Mars 否,fun 在原始问题开头定义。
  • 啊,对,@Elogent。

标签: clojure


【解决方案1】:
(defn partial-right [f & args1]
    (fn [& args2]
        (apply f (concat args2 args1))))

但是问问你自己……为什么这不是标准库的一部分?是不是其他人就这样走了,结果很糟糕?

【讨论】:

  • 我不知道。你有什么看法?
  • @NeilMasson 好吧,我正处于这个确切的位置,这就是为什么我对这个问题有一个代码答案,但我受到了高级 Clojurian 的挑战并给出了这个建议。它可以被认为是非惯用的(否则它将是标准库的明显补充)
【解决方案2】:

对于您的特定示例,您可以使用 multi arity:

(defn fun 
  ([a b] (str a b))
  ([a] (str a "1")))

【讨论】:

  • 这不回答问题,只是为作者的直接例子提供了一个解决方案。
猜你喜欢
  • 1970-01-01
  • 2017-04-21
  • 1970-01-01
  • 2021-11-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-08-12
  • 1970-01-01
相关资源
最近更新 更多