gpt4 book ai didi

clojure - 编辑无限循环运行的程序

转载 作者:行者123 更新时间:2023-12-02 04:31:33 25 4
gpt4 key购买 nike

在此 ( http://vimeo.com/14709925 ) 视频中,家伙编辑了正在循环中渲染 opengl 内容的程序。

当我运行这个时:

(def a 10)    

(defn myloop
[]
(while (= 1 1)
(println a)
(Thread/sleep 1000)))

(myloop)

然后更改a的值,重新评估什么也不做,值似乎没有改变。我正在使用 LightTable IDE。我应该切换到 emacs 吗?

最佳答案

一种可能性是重新评估没有发生,因为它是在与正在运行的程序相同的线程上完成的。尝试在另一个线程中使用 (future (myloop)) 而不是 (myloop) 运行 myloop,然后重新def 打印几次后您的 a 并查看它是否发生变化。

请注意(在当前的 Clojure 版本中)所有 vars每次遇到它们时都会取消引用,这允许这种动态行为,但在交互式测试/实验/演示期间重新定义除外是不受欢迎的。请参阅atomsrefs .

变量这种行为的另一个后果是取消引用会影响性能关键的紧密循环的效率。在不需要动态行为的地方,您可能会看到以下习惯用法来首先捕获值(请注意,在识别瓶颈之前,通常不应尝试预优化)。

(def foo 42)

(let [foo foo] ; capture value of foo within scope of let
(loop ...
; do something with value of foo captured before entering loop
... ))

关于clojure - 编辑无限循环运行的程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22989796/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com