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