重複の可能性:
スレッドの Clojure エラー: java.lang.IllegalArgumentException: キーは整数でなければなりません
このコードは非常に単純なので、どうしてうまくいかないのか混乱しています。私は持っている:
(defn create-server [port]
(let [ss (new ServerSocket port)]
(start-thread (fn [ss]
(while (not (. ss (isClosed)))
(try (listen-and-respond ss)
(catch SocketException e)))))))
(defn -main [& args]
(println "Server is starting")
(let [port (Integer/parseInt (first args))]
(println "port: " port)
(create-server port)))
これをコンパイルし、uberjar してから、コマンド ラインで起動します。これらの行:
(println "Server is starting")
(println "port: " port)
プリントアウト:
サーバーはポートを開始しています: 3457
次の行で create-server が呼び出され、次のエラーが発生します。
Exception in thread "Thread-1" clojure.lang.ArityException: Wrong number of args (0) passed to: core$create-server$fn
at clojure.lang.AFn.throwArity(AFn.java:437)
at clojure.lang.AFn.invoke(AFn.java:35)
at clojure.lang.AFn.run(AFn.java:24)
at java.lang.Thread.run(Thread.java:680)
create-server への最初の呼び出しの前の行で "port" の値が 3457 であることがわかっているため、明らかに -main の行が問題になることはありません。また、このエラーは Thread-1 にあることに気付いたので、どういうわけかこのコードが理解できない方法で繰り返されていると考えています。
何かご意見は?