1

我的课:

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
%** 在文件“Oz”中,第 62 行,第 9 列
%** ------------------ 被拒绝(1 个错误)

第 62 行是带有“浏览”的行


这是因为 Oz 试图通过传递结果参数来像函数一样使用对象过程吗?如果是这样,函数式方法的意义何在?如何使用它们?

4

1 回答 1

2

调用此类方法的语法是:

{Browse {C get($)}}

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

于 2014-04-13T18:52:01.110 回答