Smalltalk 我们如何使用pharo的每个:do:方法?

Smalltalk 我们如何使用pharo的每个:do:方法?,smalltalk,pharo,Smalltalk,Pharo,我查阅了pharo的书,没有看到任何关于each:adudation do:aBlock的例子。我发现了一个Timespan类,它在运行时确实会在创建对象和调用方法时出错 |平面图| 计划:=时间跨度新。 计划开始。 “每隔30秒保存一次文件” 计划 每隔:30秒做一次:[抄本显示:'My message']| span aDate| 日期:=日期和时间年:2012月:12日:12。 span:=时间跨度开始:持续时间:1分钟。 每隔:10秒做一次:[:每个|成绩单显示:每个;cr]。 输出

我查阅了pharo的书,没有看到任何关于
each:adudation do:aBlock
的例子。我发现了一个
Timespan
类,它在运行时确实会在创建对象和调用方法时出错

|平面图|
计划:=时间跨度新。
计划开始。
“每隔30秒保存一次文件”
计划
每隔:30秒做一次:[抄本显示:'My message']
| span aDate|
日期:=日期和时间年:2012月:12日:12。
span:=时间跨度开始:持续时间:1分钟。
每隔:10秒做一次:[:每个|成绩单显示:每个;cr]。
输出:

2012-12-12T00:00:00+00:00
2012-12-12T00:00:10+00:00
2012-12-12T00:00:20+00:00
2012-12-12T00:00:30+00:00
2012-12-12T00:00:40+00:00
2012-12-12T00:00:50+00:00
| span aDate|
日期:=日期和时间年:2012月:12日:12。
span:=时间跨度开始:持续时间:1分钟。
每隔:10秒做一次:[:每个|成绩单显示:每个;cr]。
输出:

2012-12-12T00:00:00+00:00
2012-12-12T00:00:10+00:00
2012-12-12T00:00:20+00:00
2012-12-12T00:00:30+00:00
2012-12-12T00:00:40+00:00
2012-12-12T00:00:50+00:00

Timespan的every:do:不计划事件。您可以尝试在后台进程中进行分支,但要延迟这样做

我现在只是勉强凑合着用,但应该差不多

大概是这样的:

planProcess := [
                 [ 30 seconds asDelay wait.
                   Transcript show: 'Saved (but not really)'; cr.
                 ] repeat.
               ] fork.
要结束此过程,请执行以下操作:

planProcess terminate.

您还可以使用一个调度程序来完成此任务。

Timespan的every:do:不调度事件。您可以尝试在后台进程中进行分支,但要延迟这样做

我现在只是勉强凑合着用,但应该差不多

大概是这样的:

planProcess := [
                 [ 30 seconds asDelay wait.
                   Transcript show: 'Saved (but not really)'; cr.
                 ] repeat.
               ] fork.
要结束此过程,请执行以下操作:

planProcess terminate.


您还可以使用一个调度程序来完成此任务。

测试中有几个示例。打开Pharo并浏览
TimespanDoTest
类。您还需要为
do:
块提供一个参数。TimespanDoTest没有方法every:do:实现
every:do
的类是
Timespan
TimespanDoTest
类实现了用于测试
TimespanDoTest>>的方法,每个:do:
。您可以查看这些测试,了解如何使用
Timespan
协议,包括
every:do:
。测试中有几个示例。打开Pharo并浏览
TimespanDoTest
类。您还需要为
do:
块提供一个参数。TimespanDoTest没有方法every:do:实现
every:do
的类是
Timespan
TimespanDoTest
类实现了用于测试
TimespanDoTest>>的方法,每个:do:
。您可以查看这些测试,了解如何使用
Timespan
协议,包括
every:do:
。我也会这样做,但不会每10秒重复一次。那么intead如何显示消息?@ludo-
Timespan
不会每10秒重复一次。它只是在2012-12-12T00:00:00到(但不包括)2012-12-12T00:01:00的时间跨度内,以10秒的间隔为您创建那些
DateAndTime
对象。我想@ludo可能在寻找类似
[5 times repeat:[5秒asDelay wait.Transcript show:'Hi!';cr]]fork的东西。
Heh,我明白了。好吧,在[Smalltalk]的流量下,我不认为让新用户问简单的问题是个问题;)我还想在[法特朗]增加一些流量…@fedes.-是的,简单的问题也可以,因为我也是Smalltalk的新用户,在回答这个问题之前,我甚至不知道
Timespan
),我也这么做,但不会每10秒重复一次。那么intead如何显示消息?@ludo-
Timespan
不会每10秒重复一次。它只是在2012-12-12T00:00:00到(但不包括)2012-12-12T00:01:00的时间跨度内,以10秒的间隔为您创建那些
DateAndTime
对象。我想@ludo可能在寻找类似
[5 times repeat:[5秒asDelay wait.Transcript show:'Hi!';cr]]fork的东西。
Heh,我明白了。好吧,在[Smalltalk]的流量下,我不认为让新用户问简单的问题是个问题;)我还想在[法特朗]增加一些流量…@fedes.-是的,简单的问题也可以,因为我也是Smalltalk的新用户,在回答这个问题之前,我甚至不知道
Timespan
),这正是我想要的。谢谢@fedes@ludo,没问题!我主要是通过你对另一个答案的评论来判断的,所以在你的下一个问题中,试着更加明确,以防万一(对你来说很明显的东西对其他人来说可能不是)。顺便说一句,我不认为这是一个比“快速和肮脏”,作为一个点,让你开始。这正是我所寻找的。谢谢@fedes@ludo,没问题!我主要是通过你对另一个答案的评论来判断的,所以在你的下一个问题中,试着更加明确,以防万一(对你来说很明显的东西对其他人来说可能不是)。顺便说一句,我不认为这是一个比“快速和肮脏”,作为一个点,让你开始。