首页 > 解决方案 > 在 Racket 中,是否有可能在 big-bang 中拥有多个事件处理程序?

问题描述

我想在每个刻度上做两件不同的事情。在大爆炸环境中是否可以有多个即时事件处理程序?

这就是我想做的:

(big-bang world

  (on-draw show-world)

  (on-tick event1 event2 1))

或者

(big-bang world

  (on-draw show-world)

  (on-tick event1 1)

  (on-tick event2 1))

这两种方法都不被允许。有没有办法做到这一点?

谢谢你。

标签: racketeventhandler

解决方案


这意味着什么?

例如,假设

;; A World is a Nat (a natural number).

这是两个刻度处理程序:

;; advance-by-one : World -> World
(define (advance-by-one w)
  (add1 w))

;; reset-at-ten : World -> World
(define (reset-at-ten w)
  (if (< w 10) w 0))

如果当前的 World 是9,那么您希望下一个 World 是什么?(我能想到两个似是而非的答案;你必须选择一个。)

您能否定义另一个具有您想要的含义的函数并将该(单个)函数用作刻度处理程序?(提示:您应该使用两个现有的处理函数,而不是试图将它们的定义合并到一个大函数中。)

(如果你已经进入 ISL 了:)如果你有 3 个或 4 个或 10 个要一起组成的处理程序怎么办?你能设计一个函数来获取处理程序列表并生成单个处理程序函数吗?


推荐阅读