首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ClojureScript自引用

ClojureScript自引用
EN

Stack Overflow用户
提问于 2018-01-11 03:29:58
回答 1查看 193关注 0票数 0

我正在尝试将JavaScript转换为ClojureScript一些简单的示例来熟悉ClojureScript,但是对于它的地狱,我无法理解这个snippet

代码语言:javascript
复制
var game = new Phaser.Game(800, 600, Phaser.CANVAS, 'example', { create: create });

function create() {
    var text = "- phaser -\n with a sprinkle of \n pixi dust.";
    var style = { font: "65px Arial", fill: "#ff0044", align: "center" };

    var t = game.add.text(game.world.centerX-300, 0, text, style);
}

至:

代码语言:javascript
复制
;; Uncaught ReferenceError: game is not defined
(defn create []
  (let [text "- phaser -\n with a sprinkle of \n pixi dust."
        style (js-obj "font" "65px Arial" "fill" "#ff0044" "align" "center")]
    (game.add.text (- game.world.centerX 300) 0 text style)))

(def game (js/Phaser.Game. 800 600 js/Phaser.CANVAS "example" #js {:create create}))

问题是,我还试图从ClojureScript中的函数中自引用要定义的对象-我有一种感觉,在ClojureScript中这是不正确的和/或惯用的思维方式,那么如何处理这种情况呢?

编辑:

代码语言:javascript
复制
;; Working example
(declare game)

(defn create []
  (let [text "- phaser -\n with a sprinkle of \n pixi dust."
        style (js-obj "font" "65px Arial" "fill" "#ff0044" "align" "center")]
    (.text game.add (- (.-centerX game.world) 300) 0 text style)))

(def game (js/Phaser.Game. 800 600 js/Phaser.CANVAS "example"  #js {:create create}))
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-01-11 03:36:23

Clojure不会在函数之后提取定义,因此它超出了范围。你可以把它放在作用域中,把它移到函数的上面,或者在你的文件顶部declare它。

https://clojuredocs.org/clojure.core/declare

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48194763

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档