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

Smalltalk 如何将块循环中包含的变量返回给pharo中的方法,smalltalk,pharo,pharo-5,Smalltalk,Pharo,Pharo 5,假设我有一个实现do:[]每隔:40s块的方法。块中有一个值数据,应该在每次延迟时返回。我如何将其重新运行到pharo中的方法,如下所示: Class>>更新方法 “这是一种方法” |调度程序数据| 调度程序:=任务调度程序新建。 调度程序启动。 “每40秒刷新一次” 调度程序 do:[一个get:'https://MyServer/json'. 成绩单显示:“令人耳目一新……”;cr。 数据:=NeoJSONReader fromString:a内容;cr。 每隔:60秒如果我理解您的问题,

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

Class>>更新方法
“这是一种方法”
|调度程序数据|
调度程序:=任务调度程序新建。
调度程序启动。
“每40秒刷新一次”
调度程序
do:[一个get:'https://MyServer/json'.
成绩单显示:“令人耳目一新……”;cr。
数据:=NeoJSONReader fromString:a内容;cr。

每隔:60秒
如果我理解您的问题,这里的问题是您不能使用诸如
^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.
这样,在每次对块求值时,您的代码都有机会接收新的
数据
,并正确处理它

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

processData: data
  self
    validateData: data;
    doSomethingWith: data;
    "...blah..."

processData从何而来?这是我必须创造的某种信息吗?@ludo yep,你明白了。:)正如@Lougler所说,你必须创造这样一种方法。我在我的回答中添加了这一澄清。哇,谢谢,很高兴学习新技术@LeandroCaniglia