matlab如何判断变量为空

如题所述

您好,比如
switch
expr
case
{a1,
a2,...}
do_something_1;
case
b
do_something_2;
case
{c1,c2,...}
do_something_3;
...
end
expr表达式从上至下寻找匹配,当它与某个case后面的元胞数组中的某个元素匹配,则执行该case分支的操作,然后跳出switch-case结构。
注意,matlab中switch后面的表达式可以是显式逻辑值,即逻辑0和1(因此含比较运算的表达式不算在内)、标量或者字符串,因而case后面如果不是这些类型的值,那么就不匹配。
与switch语句相比,if语句则灵活得多,if后面的表达式几乎可以是任意的表达式。
下面举个综合的例子来说明switch表达式的特性,比如
switch
1
case
[2,1]
disp('case1')
case
{3,1}
disp('case2')
case
{1,2}
disp('case3')
end
复制代码
结果返回
case2
这说明,不符合条件的case(第一个case类型不对)不匹配;出现重叠的情况(第二、三个case),switch仅仅匹配最前面一个。
之所以maltab只是匹配最前面的,就是因为它支持了case后面可以使用元胞数组的情况,这就相当于多个重复匹配的case集中在一起(这就相当于实现c/c++中不加break的情形)。
另外,如果使用if-elseif结构来实现上述功能,也是可行的,但是if-elseif本身是一个实现复杂分支程序流的结构,对于case情况非常多的时候,使用if-elseif不但代码量很大,而且可读性也没switch那么清晰(杀鸡焉用牛刀)。而使用switch-case结构,则能缩减代码量,可读性也好得多。
对于效率方面,switch-case和if-elseif结构实现同样功能,究竟孰优孰劣,这个就有待测试的检验了。个人认为if-elseif的效率更低,有2点原因:
1.
switch-case语句只需要计算一次switch后面的表达式,然后去匹配各个case;而if-elseif对于每个if后面的表达式都要进行计算,然后判断。
2.
从汇编的角度来说,if...elseif编译完后是很多条比较指令和跳转指令,而switch-case语句编译完之后,则是一张地址表,使用case的值做表的索引,因此case里的值最好步进为一。
总的来说,switch-case语句牺牲了灵活性,但提高了效率并使得代码整洁。
温馨提示:答案为网友推荐,仅供参考
第1个回答  2014-10-26
isempty 函数 如果为空 返回1本回答被提问者和网友采纳

相关了解……

你可能感兴趣的内容

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 非常风气网