【问题标题】:Clojure/ClojureScript double function undeclaredClojure/ClojureScript 双重函数未声明
【发布时间】:2013-03-31 01:21:10
【问题描述】:

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

WARNING: Use of undeclared Var my-ns/double 

double 的替代函数可以在两个平台上运行吗? 仅供参考,我正在使用它将除法后的有理数转换为双精度数 - 然后我将其格式化为字符串。

【问题讨论】:

  • 奇怪的是,我看到 cljs.core 中定义了 double 和 float...

标签: clojure clojurescript


【解决方案1】:

ClojureScript currently only supports integer and floating point literals 映射到 JavaScript 原语。目前不支持 Ratio、BigDecimal 和 BigInteger 文字。

好消息是 javascript floats are already double precision 所以没有必要明确地强制他们变成双打。坏消息是不支持有理数,所以你不能使用它们。

您要么需要重写使用有理数的表达式,要么将 JVM 的代码与针对 JS 的代码分开。看看cljx project就可以做到这一点。

关于您的用例。根据您的描述,我了解到您正在尝试重写类似于以下内容的表达式:

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

您可以像这样在 CLJS 中简单地重写该表达式:

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

请注意,您可以省略对 double 的调用:

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

希望这能解决你的问题。

【讨论】:

    猜你喜欢
    • 2022-12-24
    • 2012-11-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-22
    • 2014-03-31
    • 2018-10-27
    相关资源
    最近更新 更多