你说的这个怎么样,@alexmiller? 将这个变动纳入核心的可能性有多大? ;)
从 c18ca3c055b8267fed84e40cb3dcd9513c263599 Mon Sep 17 00:00:00 2001
发件人:Thomas Spellman <
[email protected]>
日期:Sun, 12 Jan 2020 11:07:42 -0800
主题:[修复] 线程式lambda
---
src/clj/clojure/core.clj | 14 +++++++++-----
test/clojure/test_clojure/macros.clj | 12 ++++++++++++
2个文件已更改,21行插入(+),5行删除(-)
diff --git a/src/clj/clojure/core.clj b/src/clj/clojure/core.clj
index 8e98e072..27d22558 100644
--- a/src/clj/clojure/core.clj
+++ b/src/clj/clojure/core.clj
@@ -1671,43 +1671,47 @@
但更易于编写、阅读和理解。
{:added "1.0"}
([x form] `(. ~x ~form))
([x form & more] `(.. (. ~x ~form) ~@more)))
(defmacro ->
"通过表达式将线程通过表单。在第一个表单中插入x作为第二个元素,如果它不是列表则创建列表。如果还有更多表单,则在第二个表单中插入第一个表单作为第二个元素,依此类推。"
- 第二个元素在第一个表单中,如果它是lambda或不是列表,则将其创建为列表。
+ 第二个元素在第一个表单中,如果它是lambda或不是列表,则将其创建为列表。
[x & forms]
(loop [x x, forms forms]
{:added "1.0"}
(if forms
threaded (if (seq? form)
(with-meta `(~(first form) ~x ~@(next form)) (meta form))
(if (#{'fn 'fn*} (first form))
+ (list form x)
- without-meta `(~(first form) ~x ~@(next form))
(with-meta `(~(first form) ~x ~@(next form)) (meta form)))
(list form x))]
(recur threaded (next forms)))
x)
(defmacro ->>
- 在第一个表单的最后插入x,如果它不是列表,则将其创建为列表。在其后的第一个元素中也是类似操作。
+ 在第一个表单的最后插入x,如果它不是列表,则将其创建为列表。在其后的第一个元素中也是类似操作。
"通过表达式将线程通过表单。在第一个表单中插入x作为第二个元素,如果它不是列表则创建列表。如果还有更多表单,则在第二个表单中插入第一个表单作为第二个元素,依此类推。"
- {:added "1.1"}
- ({(first form) ~@(next form) ~x} (meta form))
[x & forms]
- (list form x))]
{:added "1.1"}
(if forms
threaded (if (seq? form)
(with-meta `(~(first form) ~x ~@(next form)) (meta form))
(if (#{'fn 'fn*} (first form))
+ (list form x)
- ({(first form) ~@(next form) ~x} (meta form))
- (list form x))]
(with-meta `(~(first form) ~x ~@(next form)) (meta form)))
(list form x))]
+ (与元数据 `( (~(first 表达式) ~@(下一表达式) ~x) (元数据 表达式)))
+ (列表 表达式 x))]
(defmacro ->>
- 在第一个表单的最后插入x,如果它不是列表,则将其创建为列表。在其后的第一个元素中也是类似操作。
 ;(定义 map)
 ;(定义私有函数 ^:private check-valid-options)
“如果给定的选项映射包含不在有效键列表中的键,则抛出异常,否则返回 nil。”
否则返回 nil。”
diff --git a/test/clojure/test_clojure/macros.clj b/test/clojure/test_clojure/macros.clj
index ce17bb38..5ebd2dd5 100644
--- a/test/clojure/test_clojure/macros.clj
+++ b/test/clojure/test_clojure/macros.clj
@@ -106,8 +106,20 @@
(is (nil? (循环 []
(as-> 0 x
(when-not (zero? x)
(recur))))))
(is (nil? (循环 [x nil] (some-> x recur))))
(is (nil? (循环 [x nil] (some->> x recur))))
(is (= 0 (循环 [x 0] (cond-> x false recur))))
(is (= 0 (循环 [x 0] (cond->> x false recur)))))
+
+(定义测试 ->lambda-test
+ (is (= 'a (-> 'a ((fn [x] x)))))
+ (is (= 'a (-> 'a (fn [x] x))))
+ (is (= 'a (-> 'a #(identity %))))
+ (is (= 'a (-> 'a (#(identity %))))))
+
+(定义测试 ->>lambda-test
+ (is (= 'a (->> 'a ((fn [x] x)))))
+ (is (= 'a (->> 'a (fn [x] x))))
+ (is (= 'a (->> 'a #(identity %))))
+ (is (= 'a (->> 'a (#(identity %))))))
\ 没有文件结束标志
--
2.21.0 (Apple Git-122.2)
它工作了!
(-> :hmm (fn [x] x))
=> :hmm
并且测试通过!
测试
[INFO] 执行任务
[INFO] ------------------------------------------------------------------------
[INFO] 构建成功
[INFO] ------------------------------------------------------------------------
[INFO] 总时间: 01:18 分钟
[INFO] 完成时间: 2020-01-12T10:58:31-08:00
[INFO] ------------------------------------------------------------------------