MATLAB中非静态方法的目的是什么?

时间:2012-03-07 11:10:43

标签: oop matlab static

自MATLAB does not provide self-reference以来,MATLAB中的静态和非静态方法之间的实际区别是什么,除了后者在没有类实例的情况下不可调用?总是必须传递对待修改对象的引用(编辑除了setter,getters和overloaded operators,其中隐含地包含自引用)

2 个答案:

答案 0 :(得分:5)

对于非静态方法,Matlab提供了调用类作为第一个参数。通过(个人约定),我将此参数称为self,然后模拟自引用语法。 e.g:

methods (Static = false)
    function output = someMethod(self, arg1, arg2, arg3)
        self.x      %Now refers to the (potentially private) field `x`
        self.someOtherFunction(arg1, arg2) %Calls another method, which may be static or not.
    end
end

相比之下

methods (Static = true)
    function output = someStaticMethod(arg1, arg2, arg3)
        %There is no input appropriate to the name "self" 
        someOtherFunction(arg1, arg2) %Calls another method, which must be static
    end
end

给定一个对象someObject,可以使用以下方法调用这些方法:

someObject.someMethod(arg1, arg2, arg3)
someObject.someStaticMethod(arg1, arg2, arg3)

链接问题中讨论的自我引用是指包名,这是一种完全不同的动物。

答案 1 :(得分:0)

也许更相关的是可以在不调用对象构造函数的情况下调用静态方法:即,如果类foo具有静态方法栏,则foo.bar()调用静态方法栏而不调用构造函数foo()。