2

假设我有一个实现 do:[] every:40s 块的方法。块中有一个值数据,应该在每次延迟时返回。如何将其重新调整为 pharo 中的方法,如下所示:

Class>>updateMethod

"This is a method"
| scheduler data |
scheduler := TaskScheduler new.
scheduler start.
"refresh every 40 seconds"
scheduler
   do: [a get: 'https://MyServer/json'.
        Transcript show: 'Refreshing......'; cr.
        data := NeoJSONReader fromString: a contents; cr.
   every: 60 seconds

4

1 回答 1

3

如果我理解您的问题,这里的问题是您不能使用诸如^data返回接收到的数据之类的表达式,因为返回运算符^会退出该块。

因此,要实现所需的行为,您需要在消息中发送收到data的内容。类似的东西:

| scheduler data |
scheduler := TaskScheduler new.
scheduler start.
scheduler
  do: [a get: 'https://MyServer/json'.
    Transcript show: 'Refreshing......'; cr.
    data := NeoJSONReader fromString: a contents; cr.
    self processData: data].
  every: 40 seconds.

这样,在每次对块进行评估时,您的代码将有机会接收新的data并正确处理它。

附录:选择器processData:只不过是实际消息的提示或占位符,它将对刚刚读取的数据执行某些操作。换句话说,您应该创建这样一个方法,并在应用程序中对数据进行所需的任何处理。就像是

processData: data
  self
    validateData: data;
    doSomethingWith: data;
    "...blah..."
于 2018-01-16T12:37:40.340 回答