相关疑难解决方法(0)

我应该使用函数或宏来验证Clojure中的参数吗?

我在Clojure中有一组数字函数,我想验证参数.函数期望有许多类型的参数,例如正整数,百分比,数字序列,非零数字序列等.我可以通过以下方式验证任何单个函数的参数:

  1. 将验证代码写入函数.
  2. 编写通用函数,将参数和期望类型传递给它.
  3. 编写通用宏,将参数和期望类型传递给它.
  4. 其他我没有想到的.

Larry Hunter的一些Lisp代码是#3的一个很好的例子.(寻找test-variables宏.)

我的直觉是宏更合适,因为对评估的控制和编译时计算的潜力,而不是在运行时完成所有操作.但是,我没有遇到我正在编写的代码似乎需要它的用例.我想知道编写这样一个宏是否值得付出努力.

有什么建议?

validation macros clojure

12
推荐指数
1
解决办法
1585
查看次数

验证值是否是一组可能值之一的最佳方法是什么?

在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没有这样做的功能?

clojure

1
推荐指数
1
解决办法
94
查看次数

标签 统计

clojure ×2

macros ×1

validation ×1