Почему оба выражения в этом clojure, если оцениваются? - PullRequest
0 голосов
/ 06 марта 2020

Если я создаю новый проект с

lein new quil foo

, тогда уменьшите 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])

и оцените программу в lein repl с (use 'foo.core), обе линии нарисованы (т.е. я получаю большой X). (if (< (rand) 0.5) true false) работает как положено, чего мне не хватает?

1 Ответ

6 голосов
/ 06 марта 2020

Предположительно draw вызывается много раз - это не было бы очень интерактивным фреймворком, если бы оно рисовало экран только один раз! В некоторых случаях вы случайно выбираете одну линию, а иногда и другую; и ты никогда не сотришь. В результате они оба видны на экране.

...