Clojure/ClojureScript双倍函数未声明。

3

我正在编写一个跨Clojure/ClojureScript的函数,并使用了double函数。当我用cljsbuild编译时,它抱怨double是一个未声明的变量。

WARNING: Use of undeclared Var my-ns/double 

在两个平台上都可以使用的替代double的函数是什么? 我正在使用它来将除法后的有理数转换为双精度浮点数,然后将其格式化为字符串。


奇怪的是,我发现在cljs.core中都定义了double和float。 - Matthew H
1个回答

1

ClojureScript目前仅支持映射到JavaScript基元的整数和浮点数字面量。Ratio、BigDecimal和BigInteger文字现在不受支持。

好消息是JavaScript浮点数已经是双精度,因此无需将它们明确强制转换为双精度。坏消息是没有对有理数的支持,因此您无法使用它们。

您需要重写使用有理数的表达式或将针对JVM的代码与针对JS的代码分开。请查看cljx项目以执行此操作。

关于您的用例。从您的描述中,我了解到您正在尝试重写类似于这样的表达式:

(str (double (/ 2/4 2)))
=> "0.25"

您可以在CLJS中简单地重写该表达式,如下所示:

(str (double (/ (/ 2 4) 2)))
=> "0.25"

请注意,您可以省略对double函数的调用:
(str (/ (/ 2 4) 2))
=> "0.25"

希望这能解决您的问题。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接