2014-04-09 176 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

相关问题