Quantcast
Channel: nbeloglazov blog
Viewing all articles
Browse latest Browse all 10

Перезагрузка кода в Quil cljs

$
0
0

Испокон веков Quil поддерживал перезагрузку кода на лету. Но только в кложур версии. В то время как поддержка таковой в кложурскрипт версии отсутствовала. Но эта проблема была устранена в последней версии (2.2.6). Так что теперь, при использовании плагинов для перезагрузки кода в кложурскрипт, например figwheel, Quil тоже будет вести себя прилично: при изменении функций (draw, update, обработчиков клавиш) - изменения будут отображаться мгновенно без необходимости обновлять страницу. Вот 3-шаговая инструкция как создать такой проект:

1 Создать новый cljs проект: lein new quil-cljs helloи перейти в папку hello.
2 Настроить figwheel в project.clj:

...:plugins[[lein-cljsbuild"1.0.6"][lein-figwheel"0.3.3"]]...:cljsbuild{:builds[{:source-paths["src"]:figwheeltrue:compiler{...}}]}

3 Запустить figwheel: lein figwheel.

И всё. Теперь можно открыть index.htmlи вы должны увидеть вращающийся круг. Теперь измените core.cljи сохраните - все изменения должны (почти) мгновенно отобразиться в браузере. Например давайте изменим направление вращение круга - в функции updateзамените плюс на минус: (- (:angle state) 0.1)и сохраните файл. Круг должен начать вращаться против часовой стрелки.

Перезагрузка на лету работает только при использовании defsketch. Если использовать sketch - это не сработает (так же как и в кложур версии). При использовании defsketchвсе переданные функции (draw, update) оборачиваются в анонимные функции, так чтобы они вызывались по имени, а не по значению. Когда figwheel перезагружает hello.core/draw - Quil вызовет анонимную обёртку над draw, которая в свою очередь уже вызовет hello.core/draw. Без обёртки, Quil бы всегда использовал начальную версию draw и понятия не имел бы о том, значение в переменной drawна самом деле изменилось.


Viewing all articles
Browse latest Browse all 10

Latest Images

Trending Articles





Latest Images