gpt4 book ai didi

unit-testing - Clojure 中的单元测试局部函数(letfn)?

转载 作者:行者123 更新时间:2023-12-03 20:20:38 25 4
gpt4 key购买 nike

我花了几年时间“回到过去”做 Scheme,现在正在学习 Clojure。 Scheme 中的“最佳实践”之一是在父函数中定义辅助函数,从而限制了它们从“外部”的可见性。当然,当时 TDD 还没有完成(或已知!)所以测试这些功能不是问题。

我仍然很想以这种方式构建 Clojure 函数。即,使用 letfn 在主函数中绑定(bind)辅助函数。当然,测试这种“本地”功能是有问题的。我意识到我可以定义“私有(private)”函数,但这将可见性限制在命名空间的范围内,这会有所帮助,但不是细粒度的。如果您在另一个函数中遇到 letfn ,则很明显该函数不适用于一般用途。

所以,我的问题是,可以测试这样的本地功能吗?如果可以,如何测试?如果没有,那么是否有一些约定可以帮助阅读代码,以便清楚地知道一个函数只有一个调用者?

TIA,
账单

最佳答案

通常的方法是将函数放在命名空间中。

一种选择是使用元数据:

user=> (defn ^{::square #(* % %)} cube [x]
#_=> (* x ((::square (meta #'cube)) x)))
#'user/cube
user=> (meta #'cube)
{…, :user/square #<user$fn__780 user$fn__780@2e62c3f9>}
user=> (cube 3)
27

当然可以编写一个宏来使它更漂亮。

关于unit-testing - Clojure 中的单元测试局部函数(letfn)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27535100/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com