找回密码
 注册
关于网站域名变更的通知
查看: 507|回复: 1
打印 上一主题 下一主题

设置MATLAB类(class)对象的属性(properties)类型

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2020-2-11 13:42 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

EDA365欢迎您登录!

您需要 登录 才可以下载或查看,没有帐号?注册

x

& d- m8 @7 {3 N2 S( X# t; `在未公开的MATLAB类定义(classdef)特性(attributes),介绍了MATLAB一些未公开的特性,但是这可能还是远远不能满足我们的要求。比如说,有时我们需要强制限制某个属性的类型,以防止赋值的时候不必要的麻烦(这在C++/Java等语言是毋庸置疑的,因为C++/Java等语言是强定义类型)。比如有一个类,定了Width和Height两个属性,我们希望将这两个属性值定义为数值类型,防止用户不小心赋值为字符串或结构体。6 I3 {% }/ X9 K$ {5 T

9 [2 ?" @8 O3 g5 {( B7 Y7 a/ k在UDD类中,可以通过属性的DataType特性来轻松搞定这个问题,一个简易的做法,就是设置schema.prop函数的第二个参数。但是很不幸,在普通类中,并没有直接的公开解决方案。一个曲线救国的方案是重载属性的set方法(函数), E. I: D9 u/ X6 D" x- k" q
  • classdef myclass
  •    properties
  •      ItIsAProperty = uint16(23); %# 指定默认值
  •    end
  •    methods
  •    %# 重载set方法
  •      function obj = set.ItIsAProperty(obj,val)
  •         if ~isa(val,'uint16') % 判断类型是否正确
  •           error('only uint16 values allowed')
  •        end
  •         %# 如果正确就赋值
  •        obj.ItIsAProperty = val;
  •      end
  •    end
  • end
    7 `* \  P5 y( h; X! [
  e7 \1 ^, j) X9 {- i" {

. {# c4 e# q! w* k* ?不过Amro提供了一个更加简洁方便的方案$ S. f+ g7 K9 |' y. G* A# e
& J" ]; K+ e* p- }6 Q5 U2 w3 K7 I$ m
  • classdef Packet
  •     properties
  •        HeaderLength@uint16
  •        PayloadLength@uint16 = uint16(0);
  •        PacketType@char
  •     end
  • end
    8 E+ ]" c- T5 s% P

; F; R: [8 B3 t5 H9 c# c- x( w6 n# h+ q- p) ~$ H3 c
Amro提示说,如果试图使用错误类型进行属性赋值,将返回错误
* d! S6 \/ P2 D+ l0 l8 N, j! P6 _6 F5 n# G) l
  • >> p = Packet;
  • >> p.PacketType = 'tcp';  % ok
  • >> p.HeaderLength = 100;  % not ok - should be a uint16
  • While setting the 'HeaderLength' property of Packet:
  • Value must be 'uint16'.
    " g) i# T1 m& N/ z# R. Z5 L

& ]4 d9 @, S5 ~* W1 Y1 X  O3 V8 {. g' B* N; [/ z
该语法格式支持所有的原始类型(char,inte32,double,struct,cell等),同时还支持任何自定义的类。4 H  w" d7 Z/ _# a, H$ d" f
8 y" D; F( b7 |# m, M
在MATLAB R2013a的$matlabroot/toolbox/matlab/graphics/+graphics/+internal/+figfile/@FigFile/FigFile.m文件我们可以找到类似应用,不过在R2012a中测试结果表明也是有效的。
  S4 U( Q3 P+ a3 F& ^) S' W- [3 f% J1 {7 H( g' Q1 }7 a- M
不过有点需要注意的,当使用上述方式设置属性值类型以后,将重载属性的所有set方法,也就是说属性自定义的set方法视乎失效了。
" D/ X. S$ F' t6 n

该用户从未签到

2#
发表于 2020-2-11 19:53 | 只看该作者
设置MATLAB类(class)对象的属性(properties)类型
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

推荐内容上一条 /1 下一条

EDA365公众号

关于我们|手机版|EDA365电子论坛网 ( 粤ICP备18020198号-1 )

GMT+8, 2025-8-12 03:29 , Processed in 0.093750 second(s), 23 queries , Gzip On.

深圳市墨知创新科技有限公司

地址:深圳市南山区科技生态园2栋A座805 电话:19926409050

快速回复 返回顶部 返回列表