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