代码之家  ›  专栏  ›  技术社区  ›  user36800

为什么一些matlab类方法需要“显然”不必要的输出参数

  •  4
  • user36800  · 技术社区  · 6 年前

    在开发了几个月的项目代码之后,我终于找到了定义新类的需求。为了刷新约定,我不得不快速浏览我以前的类定义,注意到所有的构造函数和属性设置器都有一个输出参数,即使没有给它赋值,例如:

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

    我查了一个多小时的文件,没有找到解释。它看起来不像取决于函数是在类定义文件中定义的,还是在它自己的独立m文件中定义的。

    有人能解释一下吗?

    1 回复  |  直到 6 年前
        1
  •  7
  •   gnovice    6 年前

    最好从文档开始 "Comparison of Handle and Value Classes" . 从最上面:

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

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

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

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