在 Clojure REPL 中使用导入的 Java 库
Using imported Java libs in Clojure REPL
我正在尝试使用 Clojure 中的 Twilio。 Clojure 开发人员还很陌生,所以我一般都在努力掌握导入库。
我的 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})
我认为我正确导入了 Twilio Java 库,但我不确定。
我的 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!"))
据我所知,这应该是正确导入 Twilio class shown here.
然后我尝试(从 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
意味着没有构造函数接受我提供的参数,但是 line 39 of the Twilio.java file seems to take two strings, and then if you look here,你会看到我正在发送正确的参数(ACCOUNT_SID 和 AUTH_TOKEN)。
目前,我不确定我是否 (1) 正确地导入了 Twilio class,(2) 正确地向项目添加依赖项,(2) 正确地使用 REPL,或 (4) 正确使用 Twilio SDK。也许我做错了所有这些。
如果您能给我任何帮助或建议,我将不胜感激。
您链接到的函数不是构造函数,而是 class 上的静态函数。您在 clojure 中调用 class 上的静态函数,例如 (Twilio/init "foo" "bar")
。如果它实际上是一个构造函数,那么你的语法是正确的。
谢谢@juraj。我不确定这是否真的可以作为答案:-)
我正在尝试使用 Clojure 中的 Twilio。 Clojure 开发人员还很陌生,所以我一般都在努力掌握导入库。
我的 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})
我认为我正确导入了 Twilio Java 库,但我不确定。
我的 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!"))
据我所知,这应该是正确导入 Twilio class shown here.
然后我尝试(从 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
意味着没有构造函数接受我提供的参数,但是 line 39 of the Twilio.java file seems to take two strings, and then if you look here,你会看到我正在发送正确的参数(ACCOUNT_SID 和 AUTH_TOKEN)。
目前,我不确定我是否 (1) 正确地导入了 Twilio class,(2) 正确地向项目添加依赖项,(2) 正确地使用 REPL,或 (4) 正确使用 Twilio SDK。也许我做错了所有这些。
如果您能给我任何帮助或建议,我将不胜感激。
您链接到的函数不是构造函数,而是 class 上的静态函数。您在 clojure 中调用 class 上的静态函数,例如 (Twilio/init "foo" "bar")
。如果它实际上是一个构造函数,那么你的语法是正确的。
谢谢@juraj。我不确定这是否真的可以作为答案:-)