Почему я не могу заставить работать функциональные методы?

Мои занятия:

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($)}}

Причина в том, что объекты - это в основном процедуры с состоянием, которые получают сообщения. (Синтаксис необычен и изначально труден для понимания. Однако он очень регулярный и мощный.)

Другие вопросы по тегам