与clojureverse上的一个线程相关:https://clojureverse.org/t/x-x-auto-transducifying-thread-macros/8122/26
,其中作者的库提供了一个称为x>>的转置变体,它识别转置器,并试图将线程表达式转换为高效的转置器形式。
然后作者决定合并字符串和数字的键访问语义,以允许更简洁的等价于get
或get-in
的线程表达式。类似于以下内容:
(let [m {1 {"b" [0 1 {:c :res}]}}]
(x> m 1 "b" 2 :c name)) ;=> "res"
这与以下关键词习惯用法相似:
(-> m :a :b :c) ;;some-nested-value
在一般情况下,为什么eval
不应支持其他简单类型,如数字和字符串(也许还有布尔值)的键访问语义?
除了无法将IFn扩展到字符串和数字(这将需要处理额外的类型检查分发在第一个参数上而不是关注的IFn)之外,是否有反对这种语言设计论证的理由?我无法立刻想到。