尽管{{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
如果至少将这些改进之一应用上,我将非常高兴。我相信这有助于推广合约编程。
谢谢!