我在Clojure中有一组数字函数,我想验证参数.函数期望有许多类型的参数,例如正整数,百分比,数字序列,非零数字序列等.我可以通过以下方式验证任何单个函数的参数:
Larry Hunter的一些Lisp代码是#3的一个很好的例子.(寻找test-variables宏.)
我的直觉是宏更合适,因为对评估的控制和编译时计算的潜力,而不是在运行时完成所有操作.但是,我没有遇到我正在编写的代码似乎需要它的用例.我想知道编写这样一个宏是否值得付出努力.
有什么建议?
在Clojure中,验证值是否是一组可能值之一的惯用方法是什么?
我最初做了这样的事情:
(let [size :grande]
(make-latte (condp = size
:tall :tall
:grande :grande)))
Run Code Online (Sandbox Code Playgroud)
以上是有用的,因为如果没有子句匹配IllegalArgumentException则抛出.
但后来我发现这样做更舒服:
(let [size :grande]
(make-latte (or (some #{:tall :grande} [size])
(throw (IllegalArgumentException. "I don't know that size")))
Run Code Online (Sandbox Code Playgroud)
这种技术很有效,因为它允许更多可能的值,例如
(some #{:short :tall :grande :venti} [size])
Run Code Online (Sandbox Code Playgroud)
最好的方法是什么?我是否认为clojure.core没有这样做的功能?