【问题标题】:How do I call Javascript from Clojurescript?如何从 Clojurescript 调用 Javascript?
【发布时间】:2018-09-18 20:15:41
【问题描述】:

我目前正在学习 clojure,我正在尝试将一些 javascript 从 CodeCombat 转换为 clojure/clojurescript。

var base = this;
var items = base.getItems();
if (base.built.length === 0)
    base.build('peasant');

我正在尝试将 Javascript 代码转换为 Clojure,但不幸的是 CodeCombat 没有给我任何错误消息。

(def base this)
(def items (.getItems (base) ))
(def built-len ((.length) (.built (base)) ))  
(if (= built-len 0)
    ((.build "peasant") (base) )))

您发现任何明显的错误吗?我主要遵循官方互操作教程http://clojure.org/java_interop

【问题讨论】:

  • Clojure 和 ClojureScript 有很多不同之处,所以我建议你重点关注一个。 ClojureScript 文档展示了如何进行 JS 互操作。 github.com/clojure/clojurescript/wiki/…
  • 查看这个问题,了解如何从 ClojureScript stackoverflow.com/questions/15531261/… 访问 this
  • 请记住,将括号括起来会尝试将列表中的第一项作为函数调用。您确定要将字符串“农民”称为函数吗?
  • 我目前也在学习 clojure 和 clojure 脚本。也许它会帮助你。这就是我做你所说的事情的方式,它对我有用(defn get-url [path] (.getURL js/chrome.extension path))

标签: javascript clojure clojurescript


【解决方案1】:

使用 this-as 宏!但是,在宏内部使用def 并不好......如果可能,最好使用let

(this-as t
  (let [item (.getItems t)]

在您的代码中删除 base 周围的括号(这是函数调用,您不想调用它)。

【讨论】:

    猜你喜欢
    • 2015-10-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-04
    • 1970-01-01
    • 1970-01-01
    • 2016-03-24
    • 1970-01-01
    相关资源
    最近更新 更多