有迹象表明,与像省略号结尾一些数学函数:+',*',和-'.
非撇号和撇号之间有什么区别?
我想使用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)
有人曾尝试过这个吗?
想象一下,任务是在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中有更优雅/惯用的方法吗?
有没有办法在clojurescript中创建断点?在repl或chromes本机调试器中.
我试过(js*"debugger")然后返回
SyntaxError:意外的令牌调试器
谢谢!
以下程序按照我在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) 我们假设我有一个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方面引用某些内容的宏?
如何检查值是否为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) 我有以下功能:
(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 web开发的新手.
lein ring server和修改(例如路由)将自动重新加载到服务器(热部署).lein figwheel,它将监视cljs源文件的更改并相应地更新到页面.现在我开始figwheel并修改了后端代码(例如路由).重新加载页面后,修改后的内容未更新.
那么有没有办法将figwheel与环形服务器集成,以便后端更改可以自动更新?
给出以下代码:
[: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 ×10
clojure ×9
javascript ×2
breakpoints ×1
interop ×1
lisp ×1
macros ×1
nan ×1
reagent ×1
ring ×1