文档

条件语句中的对象

允许在条件语句中使用对象

通过为对象的类定义关系操作符,允许在条件语句中使用对象。类派生的类处理类继承关系操作符。值类可以实现操作符来支持使用包含对象的条件语句。金宝app有关定义类操作符的信息,请参见操作符重载

如何MATLAB评估Switch语句

MATLAB®使您能够在开关语句时,对象的类定义情商方法。的情商方法实现了==对该类对象的操作。

为对象,switch_expression==case_expression定义了MATLAB如何计算开关情况下语句。

的返回值情商方法必须为类型逻辑.MATLAB不尝试转换的输出情商变成一个逻辑值。因此,如果您的类设计需要输出情商为非逻辑值,则不能使用该类的对象开关语句。

请注意

您不需要定义情商枚举类的方法。看到Switch语句中的枚举

在Switch语句中处理对象

类派生的所有类处理类继承一个情商方法。的表达,

h1 h2 = =

真正的如果h1h2是同一对象的句柄。

例如,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在输入标量之前确定对象是否为标量开关声明。

如何定义eq方法

中的值类对象的使用开关语句,实现一个情商方法。使用情商方法确定是什么构成了类的两个对象相等。

表现得像内置类型

一些MATLAB函数也使用了内置的==操作符的实现。因此,您的实现情商应该是可替换的内置情商使你的类的对象像MATLAB代码中的内置类型一样工作。

设计的情商

实现情商方法返回表示的结果的逻辑数组==比较。

例如,SwitchOnVer类实现一个情商方法返回真正的==操作的值版本属性对于这两个对象是相同的。此外,情商与内置的工作方式相同的数组情商.对于下面的表达式:

其中obj1 = = methoda

情商方法如下:

  • 如果两个其中obj1methoda是标量,情商返回标量值。

  • 如果两个其中obj1methoda非标量数组,那么这些数组必须有相同的维数,和情商返回相同大小的数组。

  • 如果一个输入参数是标量,而另一个是非标量数组,则情商将标量对象视为具有与非标量数组相同维数的数组。

实施情商

下面是一个实现了情商方法。确保您的实现包含针对预期用途的适当错误检查。

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 (“没有版本”结束其他的错误('输入对象必须是标量'结束

Switch语句中的枚举

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立方英尺