2
下面是代碼:爲什麼不鍵入暗示提高此功能的性能?
(defn first-char-of-either [^String a ^String b]
(.substring (or a b) 0 1))
(defn first-char-of-either1 [^String a ^String b]
(.substring ^String (or a b) 0 1))
(time (dorun (repeatedly 1000000 #(first-char-of-either nil "abcde"))))
(time (dorun (repeatedly 1000000 #(first-char-of-either1 nil "abcde"))))
在這種情況下不會提高性能,在所有類型的提示,爲什麼呢?
不知道,但也許是因爲'substring'是一個'java.lang.String'方法,因此編譯器已經知道它是一個字符串? – m0skit0
編譯器無法保證在運行時可能存在什麼類和方法,所以它不知道'substring'是一種只存在於String中的方法。 –