gpt4 book ai didi

matlab - 为什么一些 Matlab 类方法需要 "apparently"不必要的输出参数

转载 作者:太空宇宙 更新时间:2023-11-03 19:53:07 24 4
gpt4 key购买 nike

在对我的项目代码进行了数月的改进之后,我终于遇到了定义一个新类的需要。不得不通过我以前的类定义作为惯例的复习,我注意到所有构造函数和属性 setter 都有一个输出参数,即使没有分配给它,例如:

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

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

谁能解释一下?

最佳答案

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

A value class constructor returns an object that is associated with the variable to which it is assigned. If you reassign this variable, MATLAB® creates an independent copy of the original object. If you pass this variable to a function to modify it, the function must return the modified object as an output argument.

A handle class constructor returns a handle object that is a reference to the object created. You can assign the handle object to multiple variables or pass it to functions without causing MATLAB to make a copy of the original object. A function that modifies a handle object passed as an input argument does not need to return the object.

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

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

关于matlab - 为什么一些 Matlab 类方法需要 "apparently"不必要的输出参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51294245/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com