5

「Clojure in Action」 (p. 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]

適用プロシージャが評価された後に例外がスローされているようです。

4

1 に答える 1

8

への最後の引数は、引数のシーケンスapplyであると想定されています。あなたの場合、使用法は次のようになります。

(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))
于 2012-08-24T05:25:28.723 に答える