Почему я не могу заставить работать функциональные методы?
Мои занятия:
declare
class Collection
attr list
meth init
list := nil
end
meth put(X)
list := X|@list
end
meth get($)
if @list == nil then
nil
else
local X in
X = @list.1
list := @list.2
X
end
end
end
end
Мое тестовое использование:
declare
C = {New Collection init}
{C put(4)}
{C put(5)}
{Browse {C get}}
Ошибка:
% ********************** ошибка статического анализа ******************* % ** % ** неверное количество аргументов в объекте приложения % ** % ** Объект: C %** Количество найдено: 2 %** Ожидается: 1 %** в файле "Оз", строка 62, столбец 9 %** ------------------ отклонено (1 ошибка)
Строка 62 - это строка с "Browse"
Это потому, что Оз пытается использовать объектную процедуру как функцию, передавая аргумент результата? Если да, то в чем смысл функциональных методов? Как их использовать?
1 ответ
Решение
Синтаксис для вызова такого метода:
{Browse {C get($)}}
Причина в том, что объекты - это в основном процедуры с состоянием, которые получают сообщения. (Синтаксис необычен и изначально труден для понимания. Однако он очень регулярный и мощный.)