假设我有一个像这样的python函数:
def required(value):
if value is None:
throw Exception
if isintance(value, str) and not value:
throw Exception
return value
Run Code Online (Sandbox Code Playgroud)
基本上我想检查值是否为null.如果值是String,也要检查它是否为空.
做这样的事情的clojure方式是什么?
在这种情况下,先决条件可以很好地完成.否则使用Clojure的控制流特殊形式/宏,例如if,cond使用throw.
user=> (defn required
[value]
{:pre [(string? value) (not-empty value)]}
value)
#'user/required
user=> (required nil)
AssertionError Assert failed: (string? value) user/required ...
user=> (required "")
AssertionError Assert failed: (not-empty value) ...
user=> (required "foo")
"foo"
Run Code Online (Sandbox Code Playgroud)
做这样的事情的Clojure方法不是抛出异常.惯用的方式是返回nil而不是别的东西.
所以我建议:这样做没有例外.
您的功能将如下所示:
(defn required [value]
(when (string? value)
value))
Run Code Online (Sandbox Code Playgroud)
它检查值的类型,nil如果它不是String,则返回.否则返回你的价值.
或者如果您想在终端中显示错误消息:
(defn required [value]
(if (string? value)
value
(println "Value must be a String.")))
Run Code Online (Sandbox Code Playgroud)
请注意,println打印String然后再次返回nil.
| 归档时间: |
|
| 查看次数: |
402 次 |
| 最近记录: |