相关疑难解决方法(0)

函数调用 - >线程宏

我们这里需要括号来调用匿名函数

user=> (-> [1 2 3 4] (conj 5) (#(map inc %)))
(2 3 4 5 6)
Run Code Online (Sandbox Code Playgroud)

为什么就没有必要加上括号map+,并fmap+在这些例子?

user=> (def map+ #(map inc %))
#'user/map+
user=> (-> [1 2 3 4] (conj 5) map+)
(2 3 4 5 6)

user=> (defn fmap+ [xs] (map inc xs))
#'user/fmap+
(-> [1 2 3 4] (conj 5) fmap+)
(2 3 4 5 6)
Run Code Online (Sandbox Code Playgroud)

clojure

9
推荐指数
1
解决办法
599
查看次数

Clojure宏总是漏水吗?

如果您阅读问题宏 - >使用匿名函数,您将看到->宏与匿名函数不兼容.要正确使用宏,您需要了解实现.从这个意义上说,宏是"漏洞" - API没有完全隐藏实现.

(足够复杂的)Clojure宏是否会泄漏?

[为了比较:C预处理器出现了类似的问题,当粗略地处理宏参数时,可以看到奇怪的副作用.在这种情况下,可以通过将宏参数括在括号中(宏内部)来解决问题.这并没有解决使用具有可变状态的C宏的问题(即每次使用参数都会改变状态),但也许我们可以忽略函数式语言的问题,或者let用来避免多次评估.

macros clojure

4
推荐指数
2
解决办法
385
查看次数

为什么我不能在线程宏中使用匿名函数?

如果我在线程宏中使用匿名函数之前定义了它:

(def even #(map even? %))
(-> [1 2 3] even)
Run Code Online (Sandbox Code Playgroud)

我得到正确的结果:

(false true false)
Run Code Online (Sandbox Code Playgroud)

但是,如果我评估以下代码:

(-> [1 2 3] #(map even? %))
Run Code Online (Sandbox Code Playgroud)

我收到以下错误:

clojure.lang.Compiler$CompilerException: java.lang.IllegalArgumentException: fn params must be Symbols
Run Code Online (Sandbox Code Playgroud)

为什么我不能在线程宏中使用匿名函数?

clojure

3
推荐指数
1
解决办法
604
查看次数

标签 统计

clojure ×3

macros ×1