请在 2024 Clojure 状态调查! 中分享您的想法。

欢迎!请参阅 关于 页面以获取有关此如何工作的更多信息。

+1 投票
ClojureScript

以下代码会抛出异常

(cljs.reader/read-string (pr-str (new js/Date 200 5)))

 #error {:message "Unrecognized date/time syntax: 200-05-31T23:06:32.000-00:00",
         :data {:type :reader-exception},
         :cause #object[Error Error: Unrecognized date/time syntax: 200-05-31T23:06:32.000-00:00]}

请注意,JS Date 可以很好地处理 200 年。

请注意,以下工作正常

(cljs.reader/read-string "#inst \"0200-05-31T23:06:32.000-00:00\"")

这表明正确的修复可能是用 normalize 在 https://github.com/clojure/clojurescript/blob/r1.10.773-2-g946348da/src/main/cljs/cljs/core.cljs#L10173 中格式化年份

2 个答案

0 投票

在单行中重现

clj -Srepro -Sdeps '{:deps {org.clojure/clojurescript {:mvn/version "1.10.764"}}}' -m cljs.main -re node -e "(require '[clojure.edn :as edn]) (edn/read-string (pr-str (new js/Date 200 5)))"

在 cljs 中打印

#inst "200-06-01T03:06:28.000-00:00"

然后读取器无法读取它。

在 JVM Clojure 中

clj -Srepro -e "(require '[clojure.edn :as edn]) (edn/read-string (pr-str (doto (new java.util.Date) (.setYear -1700))))"

它打印 #inst "0200-07-06T12:35:31.383-00:00" 而没有任何问题。

0 投票
...