请在2024 Clojure状态调查中分享您的想法!

欢迎!请参阅关于页面以了解更多关于这个工作方式的信息。

0
语法和读取器

与clojureverse上的一个线程相关:https://clojureverse.org/t/x-x-auto-transducifying-thread-macros/8122/26

,其中作者的库提供了一个称为x>>的转置变体,它识别转置器,并试图将线程表达式转换为高效的转置器形式。

然后作者决定合并字符串和数字的键访问语义,以允许更简洁的等价于getget-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)之外,是否有反对这种语言设计论证的理由?我无法立刻想到。

1个答案

+2

"除了无法将IFn扩展到字符串和数字"是一个非常关键的问题。我们不拥有这些类型,并且添加这些检查将必须在整个函数评估路径中处理,因此我认为这不可行。

...