2014-04-13 183 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

相關問題