句柄和值类的差异

Luc*_*cas 14 oop matlab

我有一些C++背景,并希望在Matlab中使用类.

句柄和值类有什么区别?

我知道如果我想用重载运算符(如"+"和"*")定义矩阵类,我会使用值类.但是,有时似乎只有当我选择一个句柄类时,事情才对我有用.

Ego*_*gon 21

MathWorks提供了一些信息,用于帮助它们以及PDF文档中的目的.我也从Yagtom项目(最初由Matt Dunham)发现这篇文章是对MATLAB中OOP的一个很好的介绍.

在帮助中,这解释如下(强调我的):

MATLAB支持两种类 - 句柄类和值类.您使用的类类型取决于类实例的所需行为以及要使用的功能.

如果要创建对类的对象中包含的数据的引用,并且不希望对象的副本生成对象数据的副本,请使用句柄类.例如,使用句柄类来实现包含电话簿条目信息的对象.多个应用程序可以访问特定的电话簿条目,但只能有一组基础数据.

句柄的引用行为使这些类能够支持事件,侦听器和动态属性等功能.

使用值类来表示不需要唯一的实体,例如数值.例如,使用值类来实现多项式数据类型.你可以复制

在马特邓纳姆的文章中,另一个好点是区分两种类型:

我们之前提到Matlab中的对象(默认情况下)是按值传递的,这意味着完整副本在方法调用中来回传递.但是,Matlab图形对象通过引用传递(通过句柄).如果我们子类化内置的句柄类[...],那么我们类的对象也将通过引用传递,而不是值.

我个人倾向于使用句柄类来获取我习惯使用Java的一些语法:对于句柄类,您可以让对象存储所有信息,这样您就可以执行类似sort(a)(或a.sort())的操作.对于值类,等价于a = sort(a)(或a = a.sort()).对于运算符,第一种语法完全没有意义,但第二种语言显然是普遍使用的:例如a = a + b(这相当于a = plus(a,b)a = a.plus(b)).

  • 如果您的类的主要关注点是存储某种类型的值(数值)并且能够执行操作,那么值类很可能是最佳选择.
  • 如果要存储状态,组相关值,将不同对象连接在一起(链接列表,图形,...),则可能需要使用句柄类.

或者至少,这是我倾向于用来区分的东西.