【问题标题】:In Racket, is it possible to have multiple event-handlers in big-bang?在 Racket 中,是否有可能在 big-bang 中拥有多个事件处理程序?
【发布时间】:2018-12-07 04:17:29
【问题描述】:

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

这是我想做的:

(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))

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

谢谢。

【问题讨论】:

  • 两个不同的刻度处理函数处理相同的数据吗?如果worldWorld,那么这两个处理函数是否都是[World -> World] 函数?
  • 当然。让我们说是的。我已经想出了一种方法,通过在结构中添加更多元素来做到这一点,但这真的很混乱。顺便说一句,我对球拍很陌生,所以请原谅我不知道所有的术语。我正在尝试为我的孙女制作一堆圣诞节游戏。

标签: racket eventhandler


【解决方案1】:

这意味着什么?

例如,假设

;; 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))

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

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

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

【讨论】:

  • 我正在努力解决的问题如下:我希望图像(篮子)随着鼠标的 posn-x 移动,并且我希望在篮子位于同一位置时发生事件作为另一个图像(一只下落的蝴蝶)并单击鼠标按钮。
  • 瑞恩,我会说 0。
  • 最初,这是一个即时问题,因为事情是及时的,但我无法弄清楚,我现在尝试用鼠标来做。 Ryan 问道:“你能设计一个函数来获取处理程序列表并生成单个处理程序函数吗?”我想这就是我要问的问题。编辑:仍然希望有人可以提供一个函数示例,该函数采用处理程序列表并生成单个处理程序函数。谢谢!
猜你喜欢
  • 2011-07-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-03-18
  • 2019-12-14
  • 2018-11-14
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多