Sib*_*ibi 3 clojure keyword-argument
我有这样的功能:
(defn foo [{a :keya b :keyb}]
(list a b))
Run Code Online (Sandbox Code Playgroud)
而我这样称呼它:
(foo {:keya "hi"}) ; Returns ("hi" nil)
Run Code Online (Sandbox Code Playgroud)
如果我不给出keyb关键字参数,则为零.有没有办法确保它抛出异常,而不是把它作为零.
(我知道我可以手动检查并抛出异常,但是有任何特殊选项可以强制执行约束.)
小智 6
您可以使用前置条件(http://clojure.org/special_forms#toc9)断言密钥存在:
(defn foo [{a :keya b :keyb}]
{:pre [(not (nil? b))]}
(list a b))
Run Code Online (Sandbox Code Playgroud)
当键为nil时,这将抛出AssertionError.