Matlab中定义枚举类

目录

定义枚举类

枚举类

构造枚举成员

转换为超类值

在枚举类中定义方法

在枚举类中定义属性

枚举类构造函数调用顺序


定义枚举类

枚举类

        通过向类定义中添加 enumeration 代码块可创建枚举类。例如,WeekDays 类列举一周中的工作日。

classdef WeekDays
   enumeration
      Monday, Tuesday, Wednesday, Thursday, Friday
   end
end

        为了执行以下各节中的 MATLAB® 代码,请将 WeekDays 类定义放在路径上的 .m 文件中。

构造枚举成员

        使用类名和成员名引用枚举成员:

ClassName.MemberName

        例如,将枚举成员 WeekDays.Tuesday 赋给变量 today:

today = WeekDays.Tuesday;

        today 是 WeekDays 类的变量:

whos
  Name       Size            Bytes  Class       Attributes

  today      1x1                104  WeekDays              
today
today = 

    Tuesday

转换为超类值

        如果枚举类指定超类,则通过将枚举对象传递给超类构造函数,可将枚举对象转换为超类。然而,超类构造函数必须能够接受自己的类作为输入,并返回超类的实例。MATLAB 的内置数值类(如 uint32)允许此转换。

        例如,Bearing 类派生自 uint32 内置类:

classdef Bearing < uint32
   enumeration
      North (0)
      East  (90)
      South (180)
      West  (270)
   end
end

        将 Bearing.East 成员赋给变量 a:

a = Bearing.East;

        将 a 传递给超类构造函数,并返回 uint32 值:

b = uint32(a);
whos
  Name      Size            Bytes  Class      Attributes

  a         1x1                60  Bearing              
  b         1x1                 4  uint32    

        uint32 构造函数接受 Bearing 子类的对象,并返回 uint32 类的对象。

在枚举类中定义方法

        在枚举类中定义方法的方式与在任何 MATLAB 类中的定义方式一样。例如,下面是 WeekDays 类,其中添加了名为 isMeetingDay 的方法:

classdef WeekDays
   enumeration
      Monday, Tuesday, Wednesday, Thursday, Friday
   end
   methods
      function tf = isMeetingDay(obj)
         tf = ~(WeekDays.Tuesday == obj);
      end
   end
end

        使用 WeekDays 类的实例调用 isMeetingDay:

today = WeekDays.Tuesday;
today.isMeetingDay
ans =

     0

        直接使用枚举成员作为方法的输入:

isMeetingDay(WeekDays.Wednesday)

ans =

     1

在枚举类中定义属性

        当必须存储与枚举成员相关的数据时,可向枚举类添加属性。在类构造函数中设置属性值。例如,SyntaxColors 类定义三个属性,当引用类成员时,构造函数会将这些属性的值赋给输入参数的值。

classdef SyntaxColors
   properties
      R
      G
      B
   end
   methods
      function c = SyntaxColors(r, g, b)
         c.R = r; c.G = g; c.B = b;
      end
   end
   enumeration
      Error   (1, 0, 0)
      Comment (0, 1, 0)
      Keyword (0, 0, 1)
      String  (1, 0, 1)
   end
end

        当引用枚举成员时,构造函数会初始化属性值:

e = SyntaxColors.Error;
e.R
ans =

     1

        由于 SyntaxColors 是值类(它不从handle 派生),只有类构造函数可以设置属性值:

e.R = 0


You cannot set the read-only property 'R' of SyntaxColors.

枚举类构造函数调用顺序

        枚举代码块中的每个语句均为枚举成员的名称,其后可跟参数列表。如果枚举类定义了构造函数,MATLAB 会调用该构造函数来创建枚举实例。

        MATLAB 为没有显式定义构造函数的所有枚举类提供默认构造函数。默认构造函数创建枚举类的实例时:

  • 如果枚举成员没有定义输入参数,则不使用输入参数

  • 使用枚举类中为该成员定义的输入参数

        例如,Bool 类的输入参数是 0(表示 Bool.No)和 1(表示 Bool.Yes)。

classdef Bool < logical
   enumeration
      No  (0)
      Yes (1)
   end
end

        值 0 和 1 属于 logical 类,因为默认构造函数将参数传递给第一个超类。也就是说,以下语句:

n = Bool.No;

        导致对 logical 的调用,等效于构造函数中的以下语句:

function obj = Bool(val)
   obj@logical(val)
end

        MATLAB 只将成员参数传递给第一个超类。例如,假设 Bool 派生自另一个类:

classdef Bool < logical & MyBool
   enumeration
      No  (0)
      Yes (1)
   end
end

        MyBool 类可以添加一些特化行为:

classdef MyBool
   methods
      function boolValues = testBools(obj)
         ...
      end
   end
end

        默认的 Bool 构造函数的行为类似以下函数:

  • 参数传递给第一个超类构造函数

  • 没有参数传递给后续构造函数

function obj = Bool(val)
   obj@logical(val) 
   obj@MyBool       
end

  • 2
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值