ClojureScript 自引用
ClojureScript self referencing
我正在尝试将一些简单的示例从 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 中的函数中自我引用待定义的对象 - 我觉得这不对and/or 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}))
Clojure 不会在函数之后获取定义,所以它超出了范围。您可以将其放在范围内,将其移动到函数上方,或者 declare
将其放在文件顶部。
我正在尝试将一些简单的示例从 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 中的函数中自我引用待定义的对象 - 我觉得这不对and/or 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}))
Clojure 不会在函数之后获取定义,所以它超出了范围。您可以将其放在范围内,将其移动到函数上方,或者 declare
将其放在文件顶部。