假设我有一个方法,它实现了 do:[] every:40s block 。 block 中有一个应在每次延迟时返回的值数据。我如何将其重新调整为 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
最佳答案
如果我理解你的问题,这里的问题是你不能使用诸如 ^data
之类的表达式来返回接收到的数据,因为返回运算符 ^
将退出 block 。
因此,要实现所需的行为,您需要在消息中发送收到的数据
。大致如下:
| 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.
这样,在每次评估 block 时,您的代码将有机会接收新的数据
并处理它。
附录:选择器processData:
只不过是实际消息的提示或占位符,它将对刚刚读取的数据执行某些操作。换句话说,您应该创建这样一个方法,并将应用程序中所需的数据处理放入其中。类似的东西
processData: data
self
validateData: data;
doSomethingWith: data;
"...blah..."
关于smalltalk - 如何将 block 循环中包含的变量返回到 pharo 中的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48278974/