经过几个月的项目代码改进,我终于满足了定义一个新类的需要。我不得不遍历我以前的类定义以作为约定的更新,我注意到所有构造函数和属性设置器都具有输出参数,即使没有为其分配任何参数,例如:
function o = myConstructor( arg1, arg2, ... )
function o = set.SomeProperty( o, arg1 )
我已经看了一个多小时的文档,却没有找到解释。看起来这并不取决于在类定义文件中定义函数还是在其单独的m文件中定义。
有人可以解释吗?
答案 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仅需要其构造函数的输出。请注意,您仍可以从句柄类方法返回一个对象(如果需要),但这不是必需的。