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

欢迎!请参阅关于页面以获取有关如何操作的一些更多信息。

0
core.contracts
尽管 {{contract}} 是库中的关键部分,但它缺少文档字符串。
ns 的文档字符串也可以包含几句话,指向主函数及其使用方法。


h3. contract

对于 contract,像以下这样会很好(请原谅我对库粗浅的理解)

定义一个命名并带有文档的合同。

constraints => signature-constraint*
signature-constraint => argument-vector constraint-vector
constraint-vector => functions and expressions [=> functions and expressions]

函数应用于参数,表达式按原样执行。
跟随 `=>` 的约束是后置条件,可以使用 `%` 来引用返回值。

例:

(contract doubler
  "确保加倍(有时)"
  [x] [number? => integer?]
  [x y] [(every? number? [x y])
           =>
         integer? (= (* 2 (+ x y)) %)])))

见 also: with-constraints, defconstrainedfn, 和 clojure.core.contracts.constraints


h3. ns

ns 的文档字符串可以改进,例如像这样


Clojure.core.contracts 的公共合同编程函数和宏。
主要用途:defconstrainedfn 或 contract 和 with-constraints。
使用 provide 对您无法控制的函数进行操作。


h3. 其他

还有其他未注明或文档不足的函数/宏可以从改进中受益,例如。

* _ 的作用是什么?
* provide 可以从(即使是简短的)示例中受益。
* require-with-constraints - 它是什么,何时使用?
* in - 举一个例子会很好。
* whitelist - 参数应该是 'thing' 而不是 'things',这样可以与文档字符串以及它是一个单个 map/set 一致。
* 使用 implies, <=>, 等的示例会很好 - 目前我并不真正知道何时/为什么使用它(更不用说如何了) [也许在 ns 的文档字符串中,所有这些函数的文档字符串都有 "... see the ns docstring")
* 为什么 defconstrainedfn 在 constraints.clj 而不是 contracts.clj 中,与其他主要函数并列?
为什么 provide 使用 "kontracts" 而不是 "c",就像 with-constraints 一样?("constraint" 和 "contract" 的不匹配 - fn 是 with-constraints 但接收 contracts - 本身就令人困惑,但这又是另一个故事。)
* defconstrainedrecord 没有文档。

如果至少对其中的一些改进进行应用,我会非常高兴。我相信这将帮助传播合同编程。

谢谢!

1 个答案

0
参考:https://clojure.atlassian.net/browse/CCONTRACTS-6(由 alex+import 报告)
...