【问题标题】:Unable to resolve symbol error in Clojure?无法解决 Clojure 中的符号错误?
【发布时间】:2016-11-05 14:01:13
【问题描述】:

这是我的代码。

(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 时,我无法解析符号:此上下文中的签名请求助手。我该如何解决这个问题?

【问题讨论】:

  • 您是否出于特定原因使用 lein deps 而不是 defproject?该错误表明您的依赖项未成功包含。

标签: clojure leiningen


【解决方案1】:

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 版本,因为这样可以直观地追踪代码中使用的函数的来源。

【讨论】:

    【解决方案2】:

    你永远不会在那种情况下定义signed-request-helper,所以它当然是无法解决的。您需要提供定义,或者,如果它包含在依赖项之一中,则需要 userequire 适当的命名空间。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-09-05
      • 1970-01-01
      • 2016-05-25
      • 2015-04-28
      • 2021-11-02
      • 2012-07-10
      • 1970-01-01
      相关资源
      最近更新 更多