标签: clojurescript

这些数学函数在Clojure中以撇号结尾是什么?

有迹象表明,与像省略号结尾一些数学函数:+',*',和-'.

非撇号和撇号之间有什么区别?

lisp functional-programming clojure clojurescript

12
推荐指数
1
解决办法
243
查看次数

如何将自己的JavaScript库添加到ClojureScript?

我想使用ClojureScript编写Google Chrome扩展程序.使用ClojureScript,我可以使用所有Google Closure库,但这些库中不包含对Chrome浏览器的访问权限.所以我想在我自己的JavaScript库中包装所有Chrome内容.

到目前为止,我尝试创建自己的jar,它有一个JavaScript文件,只创建一个Foo对象并导出构造函数.我把这个jar添加到ClojureScript编译器的lib目录中(也有goog.jar),但到目前为止没有运气:

Exception in thread "main" java.lang.IllegalArgumentException: No implementation of method: :-compile of protocol: #'cljs.closure/Compilable found for class: nil
at clojure.core$_cache_protocol_fn.invoke(core_deftype.clj:494)
at cljs.closure$eval1056$fn__1057$G__1047__1064.invoke(closure.clj:187)
at cljs.closure$get_compiled_cljs.invoke(closure.clj:422)
at cljs.closure$cljs_dependencies.invoke(closure.clj:440)
at cljs.closure$add_dependencies.doInvoke(closure.clj:462)
at clojure.lang.RestFn.applyTo(RestFn.java:139)
at clojure.core$apply.invoke(core.clj:602)
at cljs.closure$build.invoke(closure.clj:701)
at user$eval1246.invoke(cljsc.clj:21)
at clojure.lang.Compiler.eval(Compiler.java:6406)
at clojure.lang.Compiler.load(Compiler.java:6843)
at clojure.lang.Compiler.loadFile(Compiler.java:6804)
at clojure.main$load_script.invoke(main.clj:282)
at clojure.main$script_opt.invoke(main.clj:342)
at clojure.main$main.doInvoke(main.clj:426)
at clojure.lang.RestFn.invoke(RestFn.java:421)
at clojure.lang.Var.invoke(Var.java:405)
at clojure.lang.AFn.applyToHelper(AFn.java:163)
at clojure.lang.Var.applyTo(Var.java:518)
at clojure.main.main(main.java:37)
Run Code Online (Sandbox Code Playgroud)

有人曾尝试过这个吗?

javascript clojure google-closure clojurescript

11
推荐指数
2
解决办法
1465
查看次数

如何在ClojureScript中使用方法和构造函数创建JS对象

想象一下,任务是在clojurescript中创建一些实用程序库,以便可以从JS中使用它.

例如,假设我想生成相当于:

    var Foo = function(a, b, c){
      this.a = a;
      this.b = b;
      this.c = c;    
    }

    Foo.prototype.bar = function(x){
      return this.a + this.b + this.c + x;
    }

    var x = new Foo(1,2,3);

    x.bar(3);           //  >>  9    
Run Code Online (Sandbox Code Playgroud)

实现这一目标的一种方法是:

    (deftype Foo [a b c])   

    (set! (.bar (.prototype Foo)) 
      (fn [x] 
        (this-as this
          (+ (.a this) (.b this) (.c this) x))))

    (def x (Foo. 1 2 3))

    (.bar x 3)     ; >> 9
Run Code Online (Sandbox Code Playgroud)

问题:clojurescript中有更优雅/惯用的方法吗?

javascript interop clojure clojurescript

11
推荐指数
2
解决办法
2736
查看次数

clojurescript断点

有没有办法在clojurescript中创建断点?在repl或chromes本机调试器中.

我试过(js*"debugger")然后返回

SyntaxError:意外的令牌调试器

谢谢!

breakpoints clojure clojurescript

11
推荐指数
2
解决办法
1181
查看次数

Resolve函数在ClojureScript中抛出错误但不在Clojure中抛出错误

以下程序按照我在Clojure中的预期工作,但在ClojureScript中抛出错误.我想知道这是一个错误还是ClojureScript中没有这个功能,或者我需要重新考虑我试图这样做的方式.非常感谢您的帮助.

; Clojure...
(defn foo [x] x)
(defn foobee [x] (str (foo x) "bee"))

(println
  ((resolve (symbol (str "foo" "bee"))) "bizzee"))

;=> bizzeebee

; ClojureScript...
(defn foo [x] x)
(defn foobee [x] (str (foo x) "bee"))

(.log js/console
  ((resolve (symbol (str "foo" "bee"))) "bizzee"))

;=> Exception in thread "main" java.lang.IllegalArgumentException: Don't know how to create ISeq from: clojure.lang.Symbol
Run Code Online (Sandbox Code Playgroud)

clojure clojurescript

11
推荐指数
1
解决办法
1699
查看次数

如何处理Clojurescript宏中所需的Clojurescript代码?

我们假设我有一个X.clojurescript和一个X.clojure命名空间.X.clojurescript中的所有内容都是Clojurescript代码,X.clojure中的所有内容都是Clojure代码.不幸的是,我不能直接在Clojurescript中定义宏,我必须在Clojure中定义它们,然后使用它们将它们带入Clojurescript命名空间

(ns X.clojurescript.abc
  (:require-macros [X.clojure.def :as clj]))
Run Code Online (Sandbox Code Playgroud)

这可以.但是,如果宏(在X.clojure中定义)需要引用Clojurescript命名空间(X.clojurescript)中定义的内容,该怎么办?问题是Clojure编译器在解析其他命名空间时不会查看我的Clojurescript命名空间(单独的目录).

我通过简单地在我的Clojure代码中创建一个命名空间来解决这个问题,该命名空间具有与Clojurescript中相同的命名空间和所需的定义,但这看起来有点愚蠢.所以,举例来说,如果我需要X.clojurescript.abc.y在我的宏,我只是将创建Clojure的一侧DEFS一个伪Y在X.clojurescript.abc我Clojure的版本额外的命名空间; 有点愚蠢.

我如何处理需要在Clojurescript方面引用某些内容的宏?

macros clojure clojurescript

11
推荐指数
1
解决办法
1110
查看次数

在ClojureScript中检查NaN

如何检查值是否为NaN?我更喜欢一种可以在Clojure中使用的解决方案,而且没有太多额外的东西(因此我不想使用外部库,例如下划线).这是我试过的

(number? js/NaN) ;=> true, well I'd expect false
(= js/NaN (js/parseInt "xx")) ;=> false
(= js/NaN js/NaN) ;=> false, even worse

; This is the best I could come up with
(defn actual-number? 
  [n] 
  (or (> 0 n) (<= 0 n)))
Run Code Online (Sandbox Code Playgroud)

clojure nan clojurescript

11
推荐指数
1
解决办法
1923
查看次数

如何在clojurescript中使用clojure.string/join

我有以下功能:

(defn join [a] (clojure.string/join  " " a))
Run Code Online (Sandbox Code Playgroud)

但我总是有一个错误:

Uncaught ReferenceError: clojure is not defined 
Run Code Online (Sandbox Code Playgroud)

clojure clojurescript

11
推荐指数
1
解决办法
3717
查看次数

如何将figwheel与环形服务器集成以获得后端自动重载?

我是clojure/clojurescript web开发的新手.

  1. 使用lein ring server和修改(例如路由)将自动重新加载到服务器(热部署).
  2. 使用lein figwheel,它将监视cljs源文件的更改并相应地更新到页面.

现在我开始figwheel并修改了后端代码(例如路由).重新加载页面后,修改后的内容未更新.

那么有没有办法将figwheel与环形服务器集成,以便后端更改可以自动更新?

clojure ring clojurescript

11
推荐指数
1
解决办法
2800
查看次数

如何在试剂中检测"进入"Keypress?

给出以下代码:

  [:input {:type "text"
           :value (:text @app-state)
           :on-change (fn [e]
                        (if (= 31 (.-keyCode e))
                          (println "ENTER")
                          (println "NOT ENTER")))}]
Run Code Online (Sandbox Code Playgroud)

如何更改if条件以便输入按键可以与普通键区分开来?e除了target似乎为null 之外的所有属性.

clojurescript reagent

11
推荐指数
2
解决办法
3504
查看次数