欢迎!请查阅关于页面了解更多此网站的工作方式。
Tools.reader接受这个符号:MyClazz:/3,而它不接受符号MyClass:。这似乎不一致。这就是本“提问”的主要话题。
MyClazz:/3
MyClass:
顺便一提,我发现这个提交https://github.com/clojure/tools.reader/commit/31adc06cd56753ed5a3cd443cea32158ba68c45c#diff-11ba7fe0994caede16eeb1c6ed52fc3aba112849ce1fd23dff0b9fb72441a09fR111使用了一个正则表达式+正则匹配来检查字符串sym是否是一个1位数的数字字符串。我发现这比版本1.4.2造成轻微的性能下降。我认为可以使用稍微复杂但更高效的方式来实现这个检查
sym
例如,这个版本似乎比正则匹配方法快大约6倍
user=> (defn array-dim? [^String s] (and (= 1 (.length s)) (some-> (try (Integer/parseInt s) (catch Exception e nil)) pos?))) #'user/array-dim? user=> (time (dotimes [i 10000000] (array-dim? "1"))) "Elapsed time: 45.287416 msecs"
user=> (defn array-dim2? [^String s] (re-matches #"[1-9]" s)) #'user/array-dim2? user=> (time (dotimes [i 10000000] (array-dim2? "1"))) "Elapsed time: 304.30275 msecs" nil
注意clojure自己的阅读器是如何实现的
https://github.com/clojure/clojure/commit/1fa5b038a434da34f787e3aec56f9cb48ed4dd99#diff-9216bc4fd055e0567fa034ec14a8ba470d36ba5be16418c8f2e2ebe1939bbb21R259
工单已创建 https://clojure.atlassian.net/browse/TRDR-74