如果计算,为什么这个 clojure 中的两个表达式都被计算?

sjp*_*sjp 0 clojure quil

如果我创建一个新项目

lein new quil foo
Run Code Online (Sandbox Code Playgroud)

然后将 src/foo/core.clj 减少到

(ns foo.core
  (:require [quil.core :as q]
            [quil.middleware :as m]))

(defn draw [state]
  (if (< (rand) 0.5)
    (q/line 0 0 500 500)
    (q/line 0 500 500 0)))

(q/defsketch foo
  :title "Try this at home"
  :size [500 500]
  :draw draw
  :features [:keep-on-top]
  :middleware [m/fun-mode])
Run Code Online (Sandbox Code Playgroud)

在评估程序lein repl(use 'foo.core),无论是画线(即我得到一个大的X)。(if (< (rand) 0.5) true false)按预期工作,那么我错过了什么?

ama*_*loy 6

大概draw被调用了很多次——如果它只绘制一次屏幕,它就不会是一个非常交互的框架!有时,您随机选择画一条线,有时则选择另一条;你也永远不会抹去。结果,它们都在屏幕上可见。