在Clojure REPL中使用导入的Java libs

在Clojure REPL中使用导入的Java libs,clojure,twilio,twilio-api,clojure-java-interop,Clojure,Twilio,Twilio Api,Clojure Java Interop,我想用Clojure的Twilio。对于Clojure开发人员来说,这是一个非常新的概念,所以我通常会尝试导入libs 我的project.clj如下所示: (defproject magical-new-project "0.1.0-SNAPSHOT" :description "FIXME: write description" :url "http://example.com/FIXME" :license {:name "EPL-2.0 OR GPL-2.0-or-later

我想用Clojure的Twilio。对于Clojure开发人员来说,这是一个非常新的概念,所以我通常会尝试导入libs

我的
project.clj
如下所示:

(defproject magical-new-project "0.1.0-SNAPSHOT"
  :description "FIXME: write description"
  :url "http://example.com/FIXME"
  :license {:name "EPL-2.0 OR GPL-2.0-or-later WITH Classpath-exception-2.0"
            :url "https://www.eclipse.org/legal/epl-2.0/"}
  :dependencies [[org.clojure/clojure "1.10.0"]
                 [com.twilio.sdk/twilio "7.47.5"]]
  :repl-options {:init-ns magical-new-project.core})
我想我正确地导入了TwilioJava库,但我不确定

我的
core.clj
看起来像:

(ns magical-new-project.core
  (:import [com.twilio Twilio]
           ;[com.twilio.http Request Response]
           [com.twilio.rest.api.v2010.account Message]
           [com.twilio.rest.api.v2010.account Call]
           [com.twilio.type PhoneNumber]))

(defn foo
  "I don't do a whole lot."
  [x]
  (println x "Peacefully disengage, World!"))
据我所知,这应该是正确的导入

因此,我尝试(从REPL)初始化我希望已成功导入的Twilio对象,但失败了

$ lein repl
nREPL server started on port 62356 on host 127.0.0.1 - nrepl://127.0.0.1:62356
REPL-y 0.4.3, nREPL 0.6.0
Clojure 1.10.0
OpenJDK 64-Bit Server VM 12.0.1+12
    Docs: (doc function-name-here)
          (find-doc "part-of-name-here")
  Source: (source function-name-here)
 Javadoc: (javadoc java-object-or-class-here)
    Exit: Control+D or (exit) or (quit)
 Results: Stored in vars *1, *2, *3, an exception in *e

magical-new-project.core=> (Twilio. "My API or Account SID goes here" "My AUTH_TOKEN or API secret goes here")
Syntax error (IllegalArgumentException) compiling new at (form-init14687807219308370487.clj:1:1).
No matching ctor found for class com.twilio.Twilio
据我所知,
No matching ctor
意味着没有一个构造函数接受我给出的参数,但似乎有两个字符串,如果你这样做,你会看到我发送了正确的参数(ACCOUNT_SID和AUTH_令牌)

目前,我不确定(1)是否正确导入了Twilio类,(2)是否正确地将依赖项添加到项目中,(2)是否正确地使用了REPL,或者(4)是否正确地使用了Twilio SDK。也许我所有这些都做得不对


如果您能提供任何帮助或建议,我将不胜感激。

您链接的函数不是构造函数,而是类上的静态函数。在clojure中调用类的静态函数,如
(Twilio/init“foo”“bar”)
。如果它实际上是一个构造函数,那么您的语法是正确的


谢谢@juraj。我不确定这是否真的符合答案:-)

您链接到的函数不是构造函数,而是类上的静态函数。你把它叫做
(Twilio/init“foo”“bar”)
。如果它实际上是一个构造函数,那么您的语法是正确的。旁白:令人惊讶的是,他们设计的JavaAPI只能是静态的单例。哇。@B法布里:你,我的朋友,是个慷慨的天才。您似乎已经解决了我的问题,并帮助我在通往Clojure Competency的道路上迈出了一步。非常感谢您的帮助。如果您正在建立一个新项目,您可能会发现克隆和修改此回购协议很有帮助:谢谢@Alan Thompson。我已将其添加到书签中,并将尝试使用它。