2017-11-27 16 views
0

私はpharoの本を見て、私はすべての例を見ることができませんでした:aDuration do:aBlock。私は実行時にオブジェクトが作成され、メソッドが呼び出されたときにエラーを返すTimespanクラスを見つけました。 私たちはどのように使うのですか?do:pharoの方法?

|plan| 
 
plan := Timespan new. 
 
plan start. 
 
" save the file every 30s" 
 
plan 
 
    every:30 seconds do:[ Transcript show:'My message']

+3

テストにはいくつかの例があります。 Pharoを開き、 'TimespanDoTest'クラスをブラウズしてください。 'do:'ブロックの引数も指定する必要があります。 –

+0

TimespanDoTestにはメソッドがありません:do: – ludo

+0

'every:do'を実装するクラスは' Timespan'です。 'TimespanDoTest'クラスは' TimespanDoTest >>をevery:do: 'でテストするためのメソッドを実装しています。これらのテストを見て、 'every:do:'を含む 'Timespan'プロトコルの使い方を理解することができます。 –

答えて

3

タイムスパンのあらゆる:DO:イベントをスケジュールしません。 Delayを使ってバックグラウンドプロセスをフォークしようとするかもしれません。

私は現時点では便利なのですが、多かれ少なかれ同じです。このような

何か:

planProcess := [ 
       [ 30 seconds asDelay wait. 
        Transcript show: 'Saved (but not really)'; cr. 
       ] repeat. 
       ] fork. 

プロセスを終了するには:

planProcess terminate. 

あなたがこのために使用することができ、スケジューラもあります。

+1

これはまさに私が探していたものです。ありがとう@fede s – ludo

+2

@ludo、no prob!私は主にあなたのコメントによって他の答えに気付いたので、あなたの次のQのために余分な明示的にしようとすると(あなたには明白なことは他人にないかもしれない)。ところで、私はこれを評価していない "迅速かつ汚れた"より、あなたが始めるためのポイントとしてそれを取る。 –

1
|span aDate| 

aDate := DateAndTime year: 2012 month: 12 day: 12. 
span := Timespan starting: aDate duration: 1 minute. 
span every: 10 seconds do: [ :each | Transcript show: each; 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 
+0

私は同じことをしますが、10秒ごとに繰り返されません。どのようにメッセージを表示することができますか? – ludo

+1

@ludo - 'Timespan'は10秒ごとに繰り返されません*。 2012-12-12T00:00:00まで(2012年12月12日00:00まで)2012年12月12日01:00 – draegtun

+1

@ludoがそうであるかもしれないと思うのですが、単にそれらの 'DateAndTime'オブジェクトを10秒間隔で作成しています。 '[5回リピート:[5秒待ってください。トランスクリプト・ショー:「こんにちは! cr]] fork.' –

関連する問題