【发布时间】:2026-01-09 09:40:01
【问题描述】:
代码如下:
(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方法,因此编译器已经知道它是一个字符串? -
编译器无法保证运行时可能存在哪些类和方法,所以它无法知道
substring是只存在于String的方法。
标签: performance clojure type-hinting