为什么某些Matlab类方法需要“明显”不必要的输出参数

时间:2018-07-11 21:14:04

标签: matlab oop methods

经过几个月的项目代码改进,我终于满足了定义一个新类的需要。我不得不遍历我以前的类定义以作为约定的更新,我注意到所有构造函数和属性设置器都具有输出参数,即使没有为其分配任何参数,例如:

function o = myConstructor( arg1, arg2, ... )
function o = set.SomeProperty( o, arg1 )

我已经看了一个多小时的文档,却没有找到解释。看起来这并不取决于在类定义文件中定义函数还是在其单独的m文件中定义。

有人可以解释吗?

1 个答案:

答案 0 :(得分:6)

最好的起点是文档"Comparison of Handle and Value Classes"。从最顶部开始:

  

一个 value 类构造函数返回一个对象,该对象与为其分配了变量的对象相关联。如果您重新分配此变量,MATLAB®将创建原始对象的独立副本。如果将此变量传递给函数进行修改,则该函数必须将修改后的对象作为输出参数返回。

     

handle 类构造函数返回一个handle对象,该对象是对所创建对象的引用。您可以将句柄对象分配给多个变量,也可以将其传递给函数,而不会导致MATLAB复制原始对象。修改作为输入参数传递的句柄对象的函数不需要返回该对象。

换句话说,值类需要返回一个修改后的对象(这是一个与原始对象不同的新对象),而句柄类则不需要。这两个类的构造函数都将始终必须返回一个对象,因为它实际上是在构造

"Which Kind of Class to Use"是一些不错的附加读物,它链接到每种类型的类对象的几个有用的示例。查看DocPolynom value class example,您可以看到属性set方法必须返回修改后的对象,而dlnode handle class example仅需要其构造函数的输出。请注意,您仍可以从句柄类方法返回一个对象(如果需要),但这不是必需的