我正在尝试将JavaScript转换为ClojureScript一些简单的示例来熟悉ClojureScript,但是对于它的地狱,我无法理解这个snippet
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);
}至:
;; 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中这是不正确的和/或惯用的思维方式,那么如何处理这种情况呢?
编辑:
;; 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}))发布于 2018-01-11 03:36:23
Clojure不会在函数之后提取定义,因此它超出了范围。你可以把它放在作用域中,把它移到函数的上面,或者在你的文件顶部declare它。
https://stackoverflow.com/questions/48194763
复制相似问题