2014-04-09 227 views
1

是否有可能從另一個靜態方法調用靜態方法,這兩種方法屬於同一個類?還是有一些我不知道的特殊語法?目前,我試圖做到以下幾點:從另一個靜態方法中調用matlab靜態方法

% Circle.m 
classdef Circle 
    methods (Static) 
     function p = getPi 
      p = 3.14; 
     end 

     function a = getArea(r) 
      a = r * Circle.getPi * Circle.getPi; 
     end 
    end 
end 

然後:

>> Circle.getPi 
ans = 
3.1400 

>> Circle.getArea(123) 
Undefined variable "Circle" or class "Circle.getPi". 

Error in utils.Circle.getArea (line 8) 
      a = r * Circle.getPi * Circle.getPi; 

回答

1

該錯誤消息表明,你的類是utils.Circle,不Circle。你的班級放在包裏面utils.

1

請參閱"Packages Create Namespaces"文檔頁面中的Referencing Package Members Within Packages部分。基本上它說來自類的實例的普通方法不需要包前綴,但是需要靜態方法。顯然這適用於即使從另一個類方法調用靜態方法!

包中的所有包來,函數和類的引用必須使用包名前綴,除非你導入的包。 (請參見導入類)例如,使用以下語法調用包函數:

z = mypack.pkfcn(x,y); 

請注意,定義不使用包前綴。例如,pkfcn.m函數的函數定義行只包括函數名稱:

[剪斷]

調用類的方法,因爲你的類的實例不需要包名稱:

obj.myMethod(arg) or 
myMethod(obj,arg) 

靜態方法需要完整的類名

mypack.myClass.stMethod(arg) 
+0

謝謝你,你的答案和@Daniel給出的答案一樣好(減去非常有用的鏈接和冗長的例子),但是他早些時候回答,所以我接受了他的答案。 – brtk

+0

@brtk很好。很高興它是有幫助的。 – chappjc

相關問題