2024 年 Clojure 调查问卷! 中分享您的想法。

欢迎!有关如何在此工作的更多详细信息,请查看 关于 页面。

0
core.typed
h2. 问题

如果两个函数接受类似的关键字参数,我们必须写出两次。


(ann make-contract [& :optional {:name (U Symbol String)
                                 :first-order [Any :-> Any]
                                 :projection [Blame :-> [Any :-> Any]]
                                 :flat? Boolean}
                    :-> Contract])

(ann make-flat-contract [& :optional {:name (U Symbol String)
                                 :first-order [Any :-> Any]
                                 :projection [Blame :-> [Any :-> Any]]
                                 :flat? Boolean}
                         :-> Contract])


由于 HMap 语法相似,并且关键字参数经常流入 HMap 类型,所以最好将其指定为 HMap 类型。


(defalias KW
  (HMap :optional {:name (U Symbol String)
                   :first-order [Any :-> Any]
                   :projection [Blame :-> [Any :-> Any]]
                   :flat? Boolean}))
(ann make-contract [& :HMap KW :-> Contract])

(ann make-flat-contract [& :HMap KW :-> Contract])


h2. 问题

HMap 的并集是什么意思?

例如。

(defalias KW
  (U '{:a Int}
     '{:b Int}))
(ann make-contract [& :HMap KW :-> Contract])


nil 代表什么?


(defalias KW
  (U '{:a Int}
     nil))
(ann make-contract [& :HMap KW :-> Contract])

1 答案

0
参考:https://clojure.atlassian.net/browse/CTYP-301 (由 ambrosebs 报告)
...