无法在Clojure中解决符号错误?

时间:2016-11-05 14:01:14

标签: clojure leiningen

这是我的代码。

(use '[leiningen.exec :only (deps)])
(deps '[[org.clojure/clojure "1.4.0"]
       [org.clojure/data.zip "0.1.1"]])
(deps '[[clj-http "0.5.8"]
       [org.clojars.rorygibson/clj-amazon "0.3.0-SNAPSHOT"]]
  )

(def ACCESS-KEY "my access key" )
(def SECRET-KEY "my secret key" )
(def ASSOCIATE-ID "my id")

(def ENDPOINT "webservices.amazon.co.uk") 

(def signer (signed-request-helper ACCESS-KEY SECRETE-KEY ASSOCIATE-ID))

(def gibson-opus-search (item-search :signer signer :search-index "Books", :keywords "Neuromancer", :associate-tag ASSOCIATE-ID, :condition "New"))

(def lookup-specific-item (item-lookup :signer signer :associate-tag ASSOCIATE-ID :item-id "B0069KPSPC" :response-group   "ItemAttributes,OfferSummary"))

我正在尝试在Clojure上使用亚马逊的产品API。当我在命令提示符下尝试lein exec时,我无法在此上下文中解析symbol:signed-request helper。我该如何解决这个问题?

2 个答案:

答案 0 :(得分:2)

deps调用设置类路径,以便您的依赖项可用。您需要require命名空间才能加载它,然后refer(在require内)以使这些外部符号可用于您的代码。或者,您可以use加载外部名称空间和refer(尽管这些日子通常不鼓励这样做。)

在这个例子中:

(require '[clj-amazon.core :refer [signed-request-helper]]
         '[clj-amazon.product-advertising :refer [item-search item-lookup])

或者:

(use 'clj-amazon.core
     'clj-amazon.product-advertising)

通常首选require版本,因为它可以直观地跟踪代码中使用的函数来自哪里。

答案 1 :(得分:1)

您永远不会在该上下文中定义signed-request-helper,因此当然无法解析。您需要提供定义,或者如果它包含在其中一个依赖项中,则需要userequire相应的命名空间。