2014-04-13 143 views
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}} 

错误:

%********************** 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试图通过传递结果参数来像使用函数一样使用对象过程吗?如果是这样,功能方法的重点是什么?如何使用它们?

回答

2

调用这种方法的语法是:

{Browse {C get($)}} 

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

+1

谢谢。我不知道如果没有你告诉我,我会怎么想到这一点。 Oz似乎并不是最彻底的文件化语言。 – Hubro

相关问题