在“行动中的Clojure”(第63页)中使用以下示例:
(defn basic-item-total [price quantity]
(* price quantity))
(defn with-line-item-conditions [f price quantity]
{:pre [(> price 0) (> quantity 0)]
:post [(> % 1)]}
(apply f price quantity))
评估REPL:
(with-line-item-conditions basic-item-total 20 1)
导致抛出以下异常的结果:
Don't know how to create ISeq from: java.lang.Long
[Thrown class java.lang.IllegalArgumentException]
在评估应用程序后,似乎抛出了异常。
答案 0 :(得分:8)
apply
的最后一个参数应该是sequence of arguments。在您的情况下,用法可能看起来更像这样:
(defn with-line-item-conditions [f price quantity]
{:pre [(> price 0) (> quantity 0)]
:post [(> % 1)]}
(apply f [price quantity]))
当您使用参数列表时, apply
非常有用。在您的情况下,您只需调用函数:
(defn with-line-item-conditions [f price quantity]
{:pre [(> price 0) (> quantity 0)]
:post [(> % 1)]}
(f price quantity))