我主要写这个是为了后人 wb ,因为我发现了一个解决方案,但如果有人知道为什么第一次会发生这种行为,我会很好奇...
假设你有一个返回浮点数的宏
;; src/hello_world/macros.clj
(ns hello-world.macros)
(defmacro get-float [n]
(float n))
...并在ClojureScript中调用它
;; src/hello_world/core.cljs
(ns hello-world.core
(:require-macros [hello-world.macros :refer [get-float]]))
(js/console.log (get-float 1.5))
你会得到以下错误
clojure.lang.ExceptionInfo: 编译常量失败:1.5;java.lang.Float 不是一个有效的ClojureScript常量。
解决方法是确保宏返回一个double
(defmacro get-float [n]
(double n))
我知道JavaScript的浮点数是64位,与Java的double
匹配得很好,但32位的Java浮点数是否应该能够安全地自动转换为js浮点数?