文档

可变和不可变的值处理枚举成员

选择处理,或价值取向的枚举

使用处理枚举列举一组对象的状态可以改变随着时间的推移。使用枚举值列举一组抽象(不可变的)值。信息处理和值类,看到处理的比较和价值类

价值取向的枚举类

一套价值枚举类都有一个固定的特定的值。修改这些值通过改变属性的值。这样做扩展或更改为这个枚举类的固定值。

继承的财产SetAccess必须是不可变的

价值取向的枚举类隐式定义SetAccess属性的所有属性不可变的。你不能设置SetAccess任何其他值属性。

不过,所有的超类属性必须显式地定义属性SetAccess作为不可变的

枚举成员保持不变

价值取向的枚举类的一个实例是独一无二的,直到类清除并重新加载。例如,鉴于这种类:

classdef工作日枚举星期一、星期二、星期三、星期四、星期五结束结束

MATLAB®认为一个b是等价的:

一个= WeekDays.Monday;b = WeekDays.Monday;isequal (a, b)
ans = 1
a = =
ans = 1

枚举成员属性保持不变

价值取向的枚举类定义属性是不可变的。例如,颜色枚举类将RGB值与颜色的名字。

classdef颜色属性R = 0 G B = 0 = 0结束方法函数c = c (r, g, b)颜色。R = R;c。G= g; c.B = b;结束结束枚举红色(1,0,0)绿(0,1,0)蓝(0,0,1)结束结束

构造函数分配输入参数R,G,B属性:

红色= Colors.Red;[red.R, red.G red.B]
ans = 1 0 0

你不能改变一个属性值:

红色的。G= 1;
你不能设置只读属性“G”的颜色。

Handle-Based枚举类

Handle-based枚举类定义属性是可变的。获取枚举类的处理类时,您必须能够改变属性值的类的实例。

请注意

你不能得到一个枚举类matlab.mixin.Copyable因为您可以创建实例的数量是有限的,在枚举中定义的块。

枚举成员保持不变

handle-based枚举类与属性,改变一个实例的属性值会导致所有引用该实例,以反映更改的值。

例如,HandleColors枚举类将RGB值与颜色名称,一样的颜色类在前面的例子。然而,HandleColors来源于处理:

classdefHandleColors <处理属性R = 0 G B = 0 = 0结束方法函数c = HandleColors c (r, g, b)。R = R;c。G= g; c.B = b;结束结束枚举红色(1,0,0)绿(0,1,0)蓝(0,0,1)结束结束

创建一个实例HandleColors.Red和返回的值R属性:

一个= HandleColors.Red;a.R
ans = 1

MATLAB构建了HandleColors.Red枚举成员,设置R财产1,G财产0,B财产0

改变的价值R财产0.8:

a.R= 0.8;

后设置的值R财产0.8创建另一个实例,b的,HandleColors.Red:

b = HandleColors.Red;b.R
ans = 0.8000

的值R也是新创建的实例的属性0.8。MATLAB会议只有一个值的枚举成员在任何给定的时间。

清理工作空间变量不会改变当前定义的枚举成员HandleColors.Red:

清除= HandleColors.Red;a.R
ans = 0.8000

明确要加载的类的定义HandleColors类:

清晰的一个= HandleColors.Red;a.R
ans = 1

为了防止给定属性值的重新分配,设置,房产的SetAccess属性来不可变的

平等Handle-Based枚举

两个变量分配给一个特定的枚举成员:

一个= HandleColors.Red;b = HandleColors.Red;

比较一个b使用isequal:

isequal (a, b)
ans = 1

的属性值一个b都是一样的,所以呢isequal返回真正的。但是,与处理类不枚举类,一个b是相同的处理,因为只有一个枚举成员。确定处理平等使用= =(处理情商方法)。

a = =
ans = 1

看到处理情商信息的方法isequal= =当用于处理不同。

代表国家与枚举

MachineState类定义了两个枚举成员代表的状态机,运行或不运行。

classdefMachineState枚举运行NotRunning结束结束

类代表一个机启动和停止操作。的MachineState枚举是容易处理,因为它们情商字符方法,导致代码容易阅读。

classdef机<处理属性(SetAccess =私人)= MachineState.NotRunning状态结束方法函数开始(机器)如果机器。= = MachineState状态。NotRunning机器。状态= MachineState.Running;结束disp (machine.State.char)结束函数停止(机器)如果机器。= = MachineState状态。跑步机。状态= MachineState.NotRunning;结束disp (machine.State.char)结束结束结束

创建一个对象和调用开始停止方法

m =机;m.start
运行
m.stop
NotRunning

相关的话题