3
public class Hello {
public static void test(int i) {
System.out.println("int");
}
public static void test(long l) {
System.out.println("long");
}
}
user=> (def foo 1)
#'user/foo
user=> (type foo)
java.lang.Long
user=> (Hello/test 1)
long
nil
user=> (Hello/test foo)
int
nil
user=> (Integer. 1)
1
user=> (Integer. foo)
1
user=> (Short. 1)
IllegalArgumentException No matching ctor found for class java.lang.Short clojure.lang.Reflector.invokeConstructor (Reflector.java:183)
我找不出規則。整數類型轉換如何在java互操作中工作?
爲什麼'(你好/測試富)'選擇INT超載?爲什麼'(Short。1)'在'(Integer。1)'成功時失敗?沒有所有規則的官方文件?我應該閱讀編譯器的源代碼嗎? – alice
閱讀Rich Hickey的這篇文章,鏈接自我的其他答案:https://groups.google.com/forum/#!msg/clojure/7-hARL5c1lI/ntnnOweEGfUJ – noahlz
關於文檔:http://dev.clojure.org /display/doc/Documentation+for+1.3+Numerics - 請注意,行爲可能取決於您的Clojure版本。 – noahlz