2016-07-26 24 views
1

如果我們想要調用一個修改對象屬性的函數,除了在函數內部使用obj.property以外,還有另一種自引用的方法嗎?在Matlab類中有自清單嗎?

例(在其他語言如Java):

public void doSomething(int arg) 
    foobar = arg; 
end 

但是例如用Matlab:

classdef Foo < handle 
    properties 
     foobar = 0; 
    end 
    methods 
     function obj = Foo(arg) 
      if nargin > 0 
       obj.foobar = arg; 
      end 
     end 
     function doSomething(obj, arg) 
      obj.foobar = obj.foobar + arg; % Needed to reference the current object 
     end 
    end 
end 

隨着越來越多的特性,它可以開始顯得凌亂從寫所有的「OBJ
我見過一些人使用」o。「(少些字符看起來好一些),但我想知道是否有更好的方法(即:不使用obj。)或者這是唯一的選擇?

謝謝!

回答

1

這是唯一的選擇,是的。作爲第一個參數傳遞obj是必要的,因爲matlab使用「dynamic dispatch」選擇了正確的函數版本。即如果您有兩個類並且都定義了doSomething函數,則matlab將根據第一個參數的類型調用正確的版本;這就是爲什麼成員函數的第一個參數(除了構造函數)總是需要成爲對象本身。

鑑於在java中,完全不同的事情正在發生,因爲它是一種編譯語言,而不是解釋語言。那裏有一個多態等情況等等。

所以沒有。沒有捷徑。這就是matlab類的工作原理。

+0

好吧,我明白了!謝謝! :) – oppnahar

+0

更不用說,如果你的類沒有從'handle'繼承,那麼任何打算'改變'你的對象的函數只能通過返回一個新對象來覆蓋舊對象,例如,然後可以做'obj = doSomething(obj,args)'。所以,是的,從「句柄」繼承,以便您可以「通過引用傳遞」已經是一個「作弊」,可以這麼說。 –