如果您尝试运行缺少括号的代码((
、)
、[
、]
、{
或}
),脚本或函数会抛出错误:
错误: 文件: XXX.m 行: 1337 列: 42
无效的表达式。调用函数或为变量编制索引时,请使用括号。否则,请检查分隔符是否不匹配。
它似乎在执行之前执行此操作。我将编辑器设置为"错误时暂停",但与其他错误(例如引用不存在的变量)相反,它不会"跳转到"带有错误的行。
这让我很纳闷。起初我想,MATLAB 可能会计算所有类型的括号,并检查左括号的数量是否与特定类型的闭括号数量一样多。然而,情况似乎并非如此,因为:
-
该错误标识正确的行和列。如上所述的过程将无法做到这一点 - 因为它在文件级别查看括号,而不是成对。
-
这将包括字符串中使用的括号,这当然可能是不平衡的。
我的问题:MATLAB 如何检查括号是否平衡,或者更一般地说,MATLAB 如何确定表达式的有效性?
MATLAB 基本上是动态运行checkcode
,当您键入时会生成那些红色摆动,并且当您尝试运行带有不平衡括号和/或方括号/大括号的代码时,实际上会产生这些错误。只需在命令窗口中键入edit checkcode
即可查看checkcode()
的功能。我不会在这里粘贴它的代码,因为它可能是专有的,但帮助文件说:
若要强制代码分析器忽略一行代码
%#ok
,请在 线。此标记后可以跟注释。 例如:unsuppressed1 = 10 % This line will get caught suppressed2 = 20 %#ok These next two lines will not get caught suppressed3 = 30 %#ok
,因此其代码分析器(原文如此)会进行检查。可能它每行运行一些类似正则表达式的检查。
有关更详细的答案,应直接联系The MathWorks,因为其余的大多是闭源的。