为什么我无法使用功能方法?

时间:2014-04-13 11:30:25

标签: oz mozart

我的课程:

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}}

错误:

%********************** static analysis error *******************
%**
%** illegal number of arguments in object application
%**
%** Object:       C
%** Number found: 2
%** Expected:     1
%** in file "Oz", line 62, column 9
%** ------------------ rejected (1 error)

62行是"浏览"


这是因为Oz尝试通过传递结果参数来使用对象过程吗?如果是这样,功能方法的重点是什么?如何使用它们?

1 个答案:

答案 0 :(得分:2)

调用这种方法的语法是:

{Browse {C get($)}}

原因是对象基本上是接收消息的有状态过程。 (语法很不寻常,最初很难理解。但是,它非常规则和强大。)