通过为对象的类定义关系操作符,允许在条件语句中使用对象。类派生的类处理
类继承关系操作符。值类可以实现操作符来支持使用包含对象的条件语句。金宝app有关定义类操作符的信息,请参见操作符重载.
MATLAB®使您能够在开关
语句时,对象的类定义情商
方法。的情商
方法实现了==
对该类对象的操作。
为对象,switch_expression
==
case_expression
定义了MATLAB如何计算开关
和情况下
语句。
的返回值情商
方法必须为类型逻辑
.MATLAB不尝试转换的输出情商
变成一个逻辑值。因此,如果您的类设计需要输出情商
为非逻辑值,则不能使用该类的对象开关
语句。
您不需要定义情商
枚举类的方法。看到Switch语句中的枚举.
类派生的所有类处理
类继承一个情商
方法。的表达,
h1 h2 = =
是真正的
如果h1
和h2
是同一对象的句柄。
例如,BasicHandle
类来源于处理
:
classdefBasicHandle <处理属性Prop1结束方法函数obj = BasicHandle (val)如果Nargin > 0 obj。Prop1 = val;结束结束结束结束
创建一个BasicHandle
对象,并将其用于开关
声明:
h1 = BasicHandle (处理对象的);h2 = h1;
这是开关
声明代码:
开关h1情况下h2 disp (h2被选中的)否则disp (“h2不选择”)结束
其结果是:
h2被选中
的开关
语句只适用于标量对象。例如:
h1 (1) = BasicHandle (处理对象的);h1 (2) = BasicHandle (处理对象的);h1 (3) = BasicHandle (处理对象的);h2 = h1;
开关h1情况下h2 disp (h2被选中的)否则disp (“h2不选择”)结束
其结果是:
SWITCH表达式必须是标量或字符串常量。
在这种情况下,h1
不是标量。使用isscalar
在输入标量之前确定对象是否为标量开关
声明。
中的值类对象的使用开关
语句,实现一个情商
方法。使用情商
方法确定是什么构成了类的两个对象相等。
一些MATLAB函数也使用了内置的==
操作符的实现。因此,您的实现情商
应该是可替换的内置情商
使你的类的对象像MATLAB代码中的内置类型一样工作。
实现情商
方法返回表示的结果的逻辑数组==
比较。
例如,SwitchOnVer
类实现一个情商
方法返回真正的
为==
操作的值版本
属性对于这两个对象是相同的。此外,情商
与内置的工作方式相同的数组情商
.对于下面的表达式:
其中obj1 = = methoda
的情商
方法如下:
如果两个其中obj1
和methoda
是标量,情商
返回标量值。
如果两个其中obj1
和methoda
非标量数组,那么这些数组必须有相同的维数,和情商
返回相同大小的数组。
如果一个输入参数是标量,而另一个是非标量数组,则情商
将标量对象视为具有与非标量数组相同维数的数组。
下面是一个实现了情商
方法。确保您的实现包含针对预期用途的适当错误检查。
classdefSwitchOnVer属性版本结束方法函数obj = SwitchOnVer(版本)如果Nargin > 0 obj。版本=版本;结束结束函数表示“eq(其中obj1 methoda)如果~ strcmp(类(其中obj1)类(methoda))错误('对象不属于同一类')结束s1 =元素个数(其中obj1);s2 =元素个数(methoda);如果S1 == s2 bol = false(size(obj1));为k = 1: s1如果其中obj1 (k)。版本==methoda(k).Version bol(k) = true;其他的波尔(k) = false;结束结束elseifs1 == 1 bol = scalarExpEq(obj2,obj1);elseifs2 == 1 bol = scalarExpEq(obj1,obj2);其他的错误(“维missmatch”)结束函数ret = scalarExpEq (ns, s)% ns是非标量数组% s是标量数组ret = false(大小(ns));n =元素个数(ns);为kk = 1: n如果ns(乐)。Version == s.Version ret(kk) = true;其他的ret (kk) = false;结束结束结束结束结束结束
使用SwitchOnVer
对象开关
声明:
创建已知版本的对象ov1 = SwitchOnVer (1.0);ov2 = SwitchOnVer (2.0);ov3 = SwitchOnVer (3.0);……如果isscalar (objIn)开关(objIn)情况下ov1 disp (“这是1.0版”)情况下ov2 disp (“这是2.0版”)情况下ov3 disp (“这是3.0版”)否则disp (“没有版本”)结束其他的错误('输入对象必须是标量')结束
MATLAB使您能够使用枚举开关
语句,而不需要显式定义情商
枚举类的方法。
例如,WeeklyPlanner
类定义了一周中五天的枚举。的开关
/情况下
语句的todaySchedule
对对应于一周中当前日期的枚举成员的静态方法分派。的日期
和datestr
函数返回一个字符
带有当前日期名称的向量。
classdefWeeklyPlanner枚举星期一,星期二,星期三,星期四,星期五结束方法(静态)函数dayschedule dayName = datestr(日期,“dddd”);dayEnum = WeeklyPlanner。(dayName);开关dayEnum情况下WeeklyPlanner。星期一disp (周一安排的)情况下WeeklyPlanner。周二disp (“星期二安排”)情况下WeeklyPlanner。周三disp (“周三安排”)情况下WeeklyPlanner。周四disp (“周四计划”)情况下WeeklyPlanner。周五disp (周五安排的)结束结束结束结束
调用todaySchedule
显示今天的日程安排:
WeeklyPlanner.todaySchedule
从内置类型派生的枚举类继承超类情商
方法。例如,流量
类来源于int32
:
classdef流量< int32枚举低(10)中(50)高(100)结束结束
的switchEnum
函数打开输入参数,它可以是流量
枚举值。
函数switchEnum (inpt)开关inpt情况下10 disp ('流量= 10 cfm')情况下50 disp ('流量= 50 cfm')情况下100 disp ('流量= 100 cfm')结束结束
调用switchEnum
使用枚举值:
switchEnum (FlowRate.Medium)
流量= 50立方英尺