我是靠谱客的博主 瘦瘦哈密瓜,最近开发中收集的这篇文章主要介绍解读 JMAAB MATLAB 编程规范 2018版本 - Part 6,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

2.6 如何使用 MATLAB 自带函数

2.6.1 如何使用返回值数据类型不定的 MATLAB 自带函数

如果所使用的 MATLAB 自带函数返回值有不同数据类型的情况,则要写根据不同情况进行处理的代码。

比如:

LineH = find_system (gcs,... %这个函数只返回 double 类型所以不需要判断处理
' FindAll ', ' on ',' Type ',' Line ',' Dstporthandle ',-1);
SrcPortH = get_param (LineH ,' srcporthandle ');% 这个函数的返回值类型不固定
if iscell (SrcPortH ) % 如果 LineH 是 0 个或者 2 个以上,会返回 cell 类型
	delete_Line (LineH ([SrcPortH {:}] ~ =-1);
else % 如果 LineH 是 1,则 SrcPortH 是个 double 类型
	delete_Line (LineH (SrcPortH ~= -1));
end
% 那如果写成这样,就不行:
LineH = find_system (gcs,... %这个函数只返回 double 类型所以不需要判断处理
' FindAll ', ' on ',' Type ',' Line ',' Dstporthandle ',-1);
SrcPortH = get_param (LineH ,' srcporthandle ');% 这个函数的返回值类型不固定
delete_Line (LineH ([SrcPortH {:}] ~ =-1);

如果返回值的数据类型是会变的 ,那表示在不同场景下会返回不同的数据类型,如果不做兼容处理,会发生错误。

2.6.2 使用 exist 的时候,要指定类型

使用 exist 的时候,要指定类型。
因为 exist 只会按照优先级顺序来查找,而返回找到的第一个。如果不同类型的同名对象,可能会错过优先级低的同名对象也存在的信息。
比如:

ret1 = exist (' name ',' dir '); % ret1 == 7
ret2 = exist (' name ',' file '); % ret2 == 2
% 而不要这样写:
ret1 = exist (' name '); % ret1 == 7,此时判断顺序低的类型不输出

2.6.3 使用 strcmp 来对比字符串而不要使用 ==

使用 strcmp 来对比字符串而不要使用 ==。

当 check_str = ‘temp’ 和 ‘test’ 比较时

% 对比字符串可以这样写
ret = strcmp(chec_str,'test'); % ret为 0
% 而不要这样写:
ret = isequal(chec_str,'test'); % ret为 0
% 下面这样做数组比较,比较会得到 [1 1 0 0] 
% 但这样做比较时,如果字符数组长度不一致,会出错
ret = chec_str == 'test'); 
% 同样是如果字符串不匹配,会出错
ret = all(chec_str,'test'); % ret为 0

当 check_str = ‘temp’ 和 ‘t’ 比较时

显然也要这样写:

ret = strcmp(chec_str,'t'); % ret为 0

而如果直接比较的话,

% 会自动把t扩充为 tttt,然后进行比较,得到 [1 0 0 0]
ret = chec_str == 't'); 

如果是不小心把字符和数字进行比较了,会对比字符串的ASCII码的值。
这有可能不是我们所期望的。

Check_str2 = 65;
ret = isequal(check_str, check_str2); % ret 为 1

2.6.4 如何写文件操作相关代码

  1. 使用 fopen 打开的文件使用 fclose 来关闭。

如果不及时关闭,有可能会误写。

fileID = fopen (' file.m ');
:
Fclose (fileID);
  1. 使用 fopen 打开某个文件后,不要再使用 fopen 来打开它。

重复打开同一个文件,则会得到不同过的 fileID,那就意味着用不同的 ID 来操作同一个文件,有可能会得到意料之外的结果。

fileID = fopen ('file.m');
fileID = fopen ('file.m'); % fileid 被重新覆盖
fclose (fileID); 
% 即使 fclose 关闭了覆盖后的ID
% 但是文件 file.m 扔有之前的 ID 处于打开状态
  1. 如果在使用 fopen 打开文件时使用了 ‘r’ 作为打开类型,就不要用 fwrite 和 fprint 来写入文件。

注意,在不指定打开类型的情况下,默认是 ‘r’。

如果要写入文件,使用带 'w’ 的打开类型参数。因为写入只读文件,并不会真的写入内容,也不会报错给予提示,这样容易有潜藏的错误产生。

fileid = fopen ('file.txt','w');
fprintf (fileid, ' Hello, World! ');
fclose (fileID);
% 而不要这样写:
% 如果不指定打开类型,则默认是 r
fileid = fopen ('file.txt');
% 执行语句并不会写进去
fprintf (fileid, ' Hello, World! ');
fclose (fileID);

2.6.5 如何写模型操作代码

  1. 使用 Simulink 模型操作函数 xxx([],[],[],‘compile’) 命令来编译模型时,务必要使用 xxx([],[],[],‘term’) 命令来退出这个状态。
    模型在编译阶段出错的话,模型会被锁定也退不出去。
% 所以要用 try-catch 来确保程序不会死掉

try
	% 编译
	xxx([],[],[],'compile') 
	% 采集编译阶段的数据
	・・・
	% 结束编译状态
	xxx([],[],[],'term') 
catch exception
	% 结束编译状态
	xxx([],[],[],'term') 
	disp (exception.message);
end

最后

以上就是瘦瘦哈密瓜为你收集整理的解读 JMAAB MATLAB 编程规范 2018版本 - Part 6的全部内容,希望文章能够帮你解决解读 JMAAB MATLAB 编程规范 2018版本 - Part 6所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(58)

评论列表共有 0 条评论

立即
投稿
返回
顶部