1

[1,2,3].do { /* how to wait 1s here? */ }

我正在学习超级对撞机。我找到了 SimpleNumber.wait 函数,但我很快了解到它在“普通”函数中不起作用,只能在称为例程的某些“不同”类型的函数中起作用。

我故意停在那里问这个问题:有没有一种简单的方法可以在构造的每次迭代中暂停给定的时间someArray.do?我所说的“简单方式”是指不需要学习十几个新概念并经历范式转变的东西。

注意:我知道最终需要学习关于超级对撞机中的例程、任务和其他排序机制的整本大书,但现在我只想玩“玛丽有一只小羊羔”并称之为菜鸟的一天,没有必须先学习所有这些,然后才能让任何事情发生。

这可能吗?

4

1 回答 1

5

使用 .wait / .yield 功能需要一个例程。当您调用 eg3.wait时,您是在告诉某个地方的 Clock 等待 3 秒钟,然后从您停止的地方继续执行操作。为此,您需要与时钟通信,并且需要可以停止和启动的东西(执行某些功能的例程)。

您尝试执行 的完整 Routine({ [1, 2, 3].do { |n| n.postln; n.wait; } }).play(AppClock); 语法是: 上面创建了一个带有函数的例程(您的 1、2、3 循环),然后在时钟(AppClock,标准时钟)上播放它。

然而,.fork函数上的方法是执行上述操作的简写(即创建一个例程并播放它):

{ [1, 2, 3].do { |n| n.postln; n.wait; } }.fork();

于 2017-05-13T04:39:15.663 回答