可变和不可变的值处理枚举成员
选择处理,或价值取向的枚举
使用处理枚举列举一组对象的状态可以改变随着时间的推移。使用枚举值列举一组抽象(不可变的)值。信息处理和值类,看到处理的比较和价值类。
价值取向的枚举类
一套价值枚举类都有一个固定的特定的值。修改这些值通过改变属性的值。这样做扩展或更改为这个枚举类的固定值。
继承的财产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