Как я могу вернуть переменную, содержащуюся в цикле блока, в метод в pharo
Скажем, у меня есть метод, который реализует блок 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 ответ
Если я понимаю ваш вопрос, проблема заключается в том, что вы не можете использовать такое выражение, как ^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..."