use*_*800 4 oop methods matlab
在将我的项目代码发展了几个月之后,我终于需要定义一个新类.我不得不通过我之前的类定义作为约定的复习,我注意到所有构造函数和属性setter都有一个输出参数,即使没有赋值,例如:
function o = myConstructor( arg1, arg2, ... )
function o = set.SomeProperty( o, arg1 )
Run Code Online (Sandbox Code Playgroud)
我一直在查看文档一个多小时而没有找到解释.看起来它不取决于函数是在类定义文件中定义还是在其自己的单独m文件中定义.
有人可以解释一下吗?
最好的起点是文档"句柄和值类的比较".从最顶层:
甲值类构造返回与其所分配的变量相关联的对象.如果重新分配此变量,MATLAB®将创建原始对象的独立副本.如果将此变量传递给函数以对其进行修改,则该函数必须将修改后的对象作为输出参数返回.
甲手柄类构造函数返回的句柄对象,它是所创建的对象的引用.您可以将句柄对象分配给多个变量或将其传递给函数,而不会导致MATLAB复制原始对象.修改作为输入参数传递的句柄对象的函数不需要返回该对象.
换句话说,值类需要返回一个修改过的对象(这是一个与原始对象不同的新对象),而句柄类则不需要.任何一个类的构造函数总是必须返回一个对象,因为它实际上正在构造它.
一些好的附加阅读是"使用哪种类",它链接到每种类对象的几个有用的例子.查看DocPolynom
值类示例,您可以看到属性set
方法必须返回已修改的对象,而dlnode
handle类示例仅需要其构造函数的输出.请注意,您仍然可以从句柄类方法返回一个对象(如果需要),但这不是必需的.