我正在编写一个跨Clojure/ClojureScript的函数,并使用了double
函数。当我用cljsbuild编译时,它抱怨double
是一个未声明的变量。
WARNING: Use of undeclared Var my-ns/double
在两个平台上都可以使用的替代double
的函数是什么? 我正在使用它来将除法后的有理数转换为双精度浮点数,然后将其格式化为字符串。
我正在编写一个跨Clojure/ClojureScript的函数,并使用了double
函数。当我用cljsbuild编译时,它抱怨double
是一个未声明的变量。
WARNING: Use of undeclared Var my-ns/double
在两个平台上都可以使用的替代double
的函数是什么? 我正在使用它来将除法后的有理数转换为双精度浮点数,然后将其格式化为字符串。
ClojureScript目前仅支持映射到JavaScript基元的整数和浮点数字面量。Ratio、BigDecimal和BigInteger文字现在不受支持。
好消息是JavaScript浮点数已经是双精度,因此无需将它们明确强制转换为双精度。坏消息是没有对有理数的支持,因此您无法使用它们。
您需要重写使用有理数的表达式或将针对JVM的代码与针对JS的代码分开。请查看cljx项目以执行此操作。
关于您的用例。从您的描述中,我了解到您正在尝试重写类似于这样的表达式:
(str (double (/ 2/4 2)))
=> "0.25"
(str (double (/ (/ 2 4) 2)))
=> "0.25"
(str (/ (/ 2 4) 2))
=> "0.25"