我在编写客户端/服务器的测试代码时,遇到了一些意外情况。在下面的代码中,Socket
构造函数的端口参数无法被推断:
(ns second-try.test.client
(:import [java.net Socket]))
(def port 5555)
(defn -main []
; "Cannot disambiguate overloads of Socket"
(let [sock (Socket. "127.0.0.1" port)]))
第一个参数的类型应该很明显,因为我在传递一个文字。我认为端口的类型也应该很明显,因为它只是一个文字,尽管它被隐藏在
def
后面。然而,出于某种原因,它无法确定
port
的类型。我可以通过在def
前面或参数前面放置注释来解决这个问题,但为什么需要这样做呢?难道它不应该明确知道类型吗?