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

欢迎!请查看关于页面以获取更多有关该功能的信息。

0
core.contracts
尽管{{contract}}是库中的关键部分,但它缺少docstring。
ns的docstring也可以添加一些指向主要函数和如何使用的词句。
和如何使用它们。

h3. 合约

对于合约,就像这样的st.会更好(请原谅我对库的糟糕理解)

定义一个命名和文档化的合约。

约束 => 签名约束*
签名约束 => 参数向量和约束向量
约束向量 => 函数和表达式[=> 函数和表达式]

这些函数应用于参数,而表达式则是按原样执行的。
遵循`=>`的约束是后条件,可能使用`%`引用返回值。

例如:

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

另请参阅:with-constraints、defconstrainedfn和clojure.core.contracts.constraints


h3. ns

ns的docstring可以改进,例如


Clojure.core.contracts的公共合约编程函数和宏。
主要用途:defconstrainedfn或contract和with-constraints。
使用provide提供您无法控制的函数。


h3. 其他

还有一些未记录或记录较轻的函数/宏可以通过改进而受益,例如。
例如:
* _是什么意思?
* provide将从简短的示例中受益
* require-with-constraints - 它是什么,什么时候使用?
* in - 一个示例将很好
* whitelist - 参数应该是 'thing' 而不是 'things',以便与docstring保持一致,并且它是一个单个map/set
* 使用implies、<=>等的示例将很好 - 目前我并不真正知道何时/为什么使用它(更不用说如何使用它了)(也许在ns docstring中,所有这些函数的docstring都有 "... see the ns docstring")
* 为什么defconstrainedfn在constraints.clj中,而不是contracts.clj,与其他主要函数并列?
为什么provide使用"kontracts"而不是"c",就像with-constraints那样?("constraint"和"contract" - fn与with-constraints匹配但接受合约 - 之间的不匹配本身就是令人困惑,但那是另一个故事。)
* defconstrainedrecord没有doc

如果至少将这些改进之一应用上,我将非常高兴。我相信这有助于推广合约编程。

谢谢!

1个回答

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