2013-03-31 4 views
2

Я пишу функцию, которая является частью кроссовера Clojure/ClojureScript, и я использовал функцию double. Когда я компилирую это с помощью cljsbuild, он жалуется, что double является необъявленным var.Clojure/ClojureScript double function uneclared

WARNING: Use of undeclared Var my-ns/double 

Что альтернативная функция double, которая будет работать на обеих платформах? FYI, я использую его для преобразования рационального после деления на двойной - я тогда форматирую это как строку.

+0

Как ни странно, я вижу, что как double, так и float определены в cljs.core ... –

ответ

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" 

Надеюсь, это решает проблему.