如何将块循环中包含的变量返回到pharo中的方法

时间:2018-01-16 10:21:40

标签: smalltalk pharo pharo-5

假设我有一个实现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

1 个答案:

答案 0 :(得分: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..."