主要内容

目标语言编译器指令

你控制代码是如何从模型主要是通过编写或修改脚本,生成应用TLC指令和内置函数。使用下面的部分作为主要参考目标语言的语法和格式结构,以及MATLAB®薄层色谱命令本身。

目标语言的指令必须第一个非空白字符和开始<一个class="indexterm" name="d123e5715">%的性格。行开始% %TLC评论,是谁传递到输出流。行开始/ *C评论,传递到输出流。

语法

一个<一个class="indexterm" name="d123e5735">目标语言文件由一系列的语句的形式:

  • (文本| % <表达式>)*

    文字文本传递给输出流修改的,和表达封闭% < >评估被写入到输出(之前被剥夺了吗% < >)。

  • %的关键字(argument1, argument2,…)

    %的关键字代表一个指令的目标语言编译器,和(argument1, argument2,…)代表表达式定义必需的参数。例如,语句

    %分配sysNumber = sysIdx + 1

    使用%分配指令来定义或改变的价值sysNumber参数。

指令

本节的其余部分显示了完整的组<一个class="indexterm" name="d123e5773">目标语言编译器<一个class="indexterm" name="d123e5777">指令,并详细描述了每一个指令。

% %文本

单行注释的地方文本是评论。

/ %文本% /

单(或多行),发表评论文本是评论。

% matlab

调用MATLAB函数不返回结果。例如,% matlab disp (2.718)

% < expr >

评估的目标语言表达式。例如,如果你有一个创建通过TLC变量%分配varName = " foo ",然后% < varName >将扩大喷火。表达式也可以是函数调用,如% < FcnName (param1 param2) >。在指令行,不需要被放置在TLC表达式% < >语法。这样做会导致双重评估。例如,%如果% < x > = = 3处理通过创建一个隐藏变量的评估价值变量x。%如果声明然后评估这个隐藏变量并将它与3。有效的方法是写操作%如果x = = 3。在MATLAB的符号,这就等同于写如果eval (x) = = 3而不是如果x = 3。在一次例外%分配格式控制,如在

%分配str = "价值是:% < var >”

注意:嵌套的评价表达式(例如,% < foo (% < expr >) >不支持)。金宝app

没有一个字符串内速度损失评估,如

%分配x = " % < expr >”

避免评估外部字符串,如以下示例。

%分配x = % < expr >

%如果expr
% elseifexpr
其他的%
% endif

条件包含,常数表达式expr必须评估一个整数。例如,下面的代码检查是否一个参数,k0.0,数值通过执行TLC库函数来检查平等。

%如果ISEQUAL (0.0 k) <文本和处理指令如果k = 0.0 > % endif

在这个和其他指令,您不需要使用扩展变量或表达式% < expr >符号,除非expr出现在一个字符串。例如,

%如果ISEQUAL (idx my_idx % <我>),在那里idx都是字符串。

和其他语言一样,逻辑评估做短路时停止(已知)的结果。

%开关expr
%的情况expr
%打破
%的默认
%打破
% endswitch

%开关指令类似于C语言开关声明。表达式expr应该可以比较的一种平等使用吗= =操作符。如果%打破不包括在吗%的情况声明,那么它将会下降到下一条语句。

%,
% endwith

%与recordName是一个作用域操作符。用它来把名字记录到当前范围,继续,直到匹配% endwith遇到(%,根据需要指令可以嵌套)。

注意左侧的%分配语句包含在一个%,/% endwith块,记录必须完全限定字段的引用(参见<一个href="//www.tatmou.com/jp/jp/help/rtw/tlc/code-generation-concepts.html" class="a">给字段赋值的记录),如以下示例。

以CompiledModel % % %分配oldName =名称分配CompiledModel.name = % endwith“新名称”

% setcommandswitch字符串

改变一个命令行开关的值作为指定的参数字符串。仅支持以下开关:金宝app

v, m p O d r,我,一个

下面的示例设置冗长级别为1。

% setcommandswitch“v1”

另请参阅<一个href="//www.tatmou.com/jp/jp/help/rtw/tlc/command-line-arguments.html" class="a">命令行参数

%断言expr

测试一个布尔表达式的值。如果表达式的求值结果为false, TLC问题一条错误消息,堆栈跟踪和退出;否则,继续执行正常。启用断言之外的代码生成器的评估环境,使用命令行选项- da。在构建的代码生成器,这个标志将被忽略,因为它所取代的使TLC断言复选框的薄层色谱过程部分的代码生成>调试窗格。从MATLAB命令窗口控制断言处理,使用

set_param(模型、“TLCAssertion”、“|关闭”)

设置这个标志。默认是关闭的。当前的设置,使用

get_param(模型、“TLCAssertion”)

%的错误
%的警告
%的跟踪
%的退出

流控制指令:

%的错误令牌

令牌扩大并显示。

%的警告令牌

令牌扩大并显示。

%的跟踪令牌

令牌扩大,显示只有当详细输出命令行选项- vv1都是确定的。

%的退出令牌

令牌扩大,显示,TLC退出。

当报告错误,使用下面的命令,如果错误是由一个不正确的配置,用户需要修正模型中。

%退出错误消息

如果你添加断言代码(代码不应达到),使用

% setcommandswitch“v1”% %迫使TLC堆栈跟踪%退出维护信息

%分配

创建标识符(变量)。一般的形式是

%分配[:]变量=表达式

::指定变量创建一个全局变量;否则,它是一个局部变量在当前的范围(即。一个局部变量在函数)。

如果你需要格式的变量,基于其他TLC变量在一个字符串,那么您应该执行双重评价,如

%分配nameInfo = "这是% <名称>”的名字

或交替

%分配nameInfo = "的名字,这是“+名字

分配一个值的字段记录,您必须使用一个合格变量表达式。看到<一个href="//www.tatmou.com/jp/jp/help/rtw/tlc/code-generation-concepts.html" class="a">给字段赋值的记录

% createrecord

在内存中创建记录。此命令接受一个或多个记录的列表规范(例如,{foo 27})。每个记录规范包含零个或多个名称-值对的列表(例如,foo 27),成为记录被创建的成员。值本身可以记录规范,如下所示。

% createrecord NEW_RECORD {foo 1;SUB_RECORD {foo 2}} % x = NEW_RECORD分配。喷火/ *x= 1 */ %assign y = NEW_RECORD.SUB_RECORD.foo /* y = 2 */

如果多个记录规范给定的记录名称、记录规范构成的数组记录的集合。

% createrecord RECORD_ARRAY {foo 1}…{foo 2}…{酒吧3}%分配x = RECORD_ARRAY [1]。喷火/ *x= 2 */ %assign y = RECORD_ARRAY[2].bar /* y = 3 */

请注意,您可以创建和索引数组subrecords通过指定% createrecord与相同命名subrecords,如下:

% createrecord RECORD_ARRAY {SUB_RECORD {foo 1}…SUB_RECORD {foo 2}…SUB_RECORD {foo 3}} %分配x = RECORD_ARRAY.SUB_RECORD [1]。foo / * x = 2 * / %分配y = RECORD_ARRAY.SUB_RECORD [2]。foo / * y = 3 * /

如果范围解析操作符(::)后的第一个令牌% createrecord令牌,在全球范围内创建的记录。

请注意

你不应该创建一个数组,使用记录% createrecord在一个循环。

% addtorecord

将字段添加到一个现有的记录。新字段名称-值对或别名已经存在的记录。

% addtorecord OLD_RECORD foo 1

如果新字段添加一条记录,然后% addtorecord使一个别名记录,而不是深拷贝。深复制,使用% copyrecord

% createrecord NEW_RECORD {foo 1} % addtorecord OLD_RECORD NEW_RECORD_ALIAS NEW_RECORD

% mergerecord

添加(或合并)一个或多个记录到另一个。第一条记录的结果将包含合并的第一个记录的内容加上其他记录指定的命令。第二个(以及随后的)记录的内容是深复制到第一个(即。他们不是引用)。

% mergerecord OLD_RECORD NEW_RECORD

如果重复的字段中存在记录被合并,原始记录的字段不覆盖。

% copyrecord

深复制现有的记录。它以类似的方式创建一个新的记录% createrecord除了记录的组件是深复制现有的记录。别名是被拷贝。

% copyrecord NEW_RECORD OLD_RECORD

% realformat

指定如何格式实际变量。在指数格式符号与16位精度的使用

% realformat“指数”

格式不损失精度和最小字符数,使用

% realformat“简洁”

设置为内联S-functions时,格式简洁的。你可以切换到指数,但要换回简洁的当完成。

%的语言

这必须出现在第一生成GENERATE_TYPE函数调用。这将指定的名称语言作为一个字符串,在产生%的语言“C”。通常,这是目标文件添加到您的系统。

唯一有效的值C这使得支持金宝appCc++代码生成指定的配置参数TargetLang(见<一个href="//www.tatmou.com/jp/jp/help/rtw/ref/language.html" class="a">语言的更多信息)。

%实现

放置在.tlc文件为一个特定的记录类型,通过映射% generatefile。语法%实现“类型”“语言”。在C或c++内联函数时,这应该是第一个noncomment线文件,如

%实现“s_function_name”“C”

下noncomment行%的功能指示指定功能的功能。

看到%的语言生成函数描述为进一步的信息。

% generatefile

提供了一个记录之间的映射类型和函数包含在一个文件中。每条记录可以有函数同名但不同的内容映射到它(即。多态性)。一般来说,这是用于映射记录类型.tlc文件实现的功能块,

% generatefile“罪恶”“sin_wave.tlc”

% filescope

限制范围的变量在定义它们的文件。一个% filescope指令在一个文件中变量声明文件是可见的只有在文件。请注意,这个限制也适用于文件插入,通过%包括指令,包含到文件% filescope指令。

你不应该使用% filescope在函数或指令生成功能。

% filescope保存记忆中是有用的。变量的范围是有限的% filescope的范围在包含它们的执行文件完成。这使内存分配给这些变量。相比之下,全局变量保存在内存中执行的程序。

%包括

使用%包括“file.tlc”在当前点插入指定的目标文件。

%包括指令的行为就好像他们在全球背景下。例如,

% addincludepath”。/sub1" %addincludepath "./sub2"

在一个.tlc文件允许隐式引用或者子文件夹:

%包括“file_in_sub1。薄层色谱”%包括”文件_in_sub2.tlc"

使用正斜杠文件夹名称,因为它们在UNIX工作®和电脑系统。然而,如果你使用反斜杠在电脑文件夹的名字,一定要摆脱它们,例如,“C: \ \ mytlc”。或者,你可以表达一个电脑文件夹名称文字使用L格式说明符,如L“C: \ mytlc”

% addincludepath

使用% addincludepath“文件夹”添加额外的搜索路径。多个% addincludepath指令可以出现。编译器对多个% addincludepath指令的自底向上

使用% addincludepath指令建立一个全局上下文。例如,

% addincludepath”。/sub1" %addincludepath "./sub2"

在一个.tlc文件允许隐式引用或者子文件夹:

%包括“file_in_sub1。薄层色谱”%包括”文件_in_sub2.tlc"

使用正斜杠文件夹名称,因为它们工作在UNIX和电脑系统。然而,如果你使用反斜杠在电脑文件夹的名字,一定要摆脱它们,例如,“C: \ \ mytlc”。或者,你可以表达一个电脑文件夹名称文字使用L格式说明符,如L“C: \ mytlc”

%卷
% endroll

多个包含+内在循环滚动基于指定的阈值。这个指令可以使用大多数仿真软件金宝app®块有一个整体块宽度的概念,通常是信号通过的宽度。

这个例子的%卷指令是为了增加操作,y = u * k:

%函数输出(块,系统)输出/ * % <类型>块:% <名称> * / %分配rollVars = [“U”、“Y”、“P”) %辊sigIdx = RollRegions lcv = RollThreshold,块,……“滚”,rollVars %分配y = LibBlockOutputSignal(0”“液位控制阀,sigIdx) %分配u = LibBlockInputSignal(0”“液位控制阀,sigIdx) %分配k = LibBlockParameter(增益、”“,lcv sigIdx) % < y > = % < u > * % < k >;% endroll % endfunction

%卷指令类似于% foreach,除了它迭代标识符(sigIdx在这个例子中)地区。辊区域计算通过观察输入信号输入并生成地区是连续的。块的变量RollRegions自动计算并放置在吗记录。一卷区域向量的一个例子[台网,20:39],有两个连续的范围的信号通过。第一个是台网第二个是20:39。每个辊区域是放置在一个循环体(例如,C语言声明)或内联,取决于该地区的长度是否小于阈值。

每一次通过%卷循环,sigIdx是一个整数开始当前辊区域或一个偏移量相对于整个块宽度当当前辊区域小于阈值。薄层色谱的全局变量RollThreshold一般model-wide值被用来决定何时将一个给定的区域在一个循环中。当决定将一个给定的地区一个循环,这个循环控制变量是一个有效的标识符(例如,“”);否则它是”“

参数是当前块,滚。的“滚”为内部参数指定的名称GENERATE_TYPE调用了%卷。默认的%卷处理程序“滚”负责设置默认的块循环滚动结构(例如,一个C循环)。

rollVars(卷变量)来传递“滚”函数来创建卷结构。定义循环变量相对于一块

“U”

块的输入。它假设您使用液位控制阀,LibBlockInputSignal (portIdx”、“sigIdx)访问每个输入,portIdx从0开始的第一个输入端口。

“u

类似于“U”除了只对特定的输入,。的“u”必须小写或将被解释为“U”以上。

“Y”

块的输出。它假设您使用液位控制阀,LibBlockOutputSignal (portIdx”、“sigIdx)访问每个输出,portIdx从0开始的第一个输出端口。

“y

类似于“Y”只对特定的输出,除了,。的“y”必须小写或将被解释为“Y”以上。

“P”

块的参数。它假设您使用LibBlockParameter(名称、“lcv sigIdx)来访问它们。

“< param > /的名字

类似于“P”,除了特定的为一个特定的的名字

rwork

RWork向量的块。它假设您使用LibBlockRWork(名称、“lcv sigIdx)来访问它们。

“< rwork > /的名字

类似于RWork,除了特定的的名字

dwork

DWork向量的块。它假设您使用LibBlockDWork(名称、“lcv sigIdx)来访问它们。

“< dwork > /的名字

类似于DWork,除了特定的的名字

套装

套装向量的块。它假设您使用LibBlockIWork(名称、“lcv sigIdx)来访问它们。

“< iwork > /的名字

类似于套装,除了特定的的名字

pwork

PWork向量的块。它假设您使用LibBlockPWork(名称、“lcv sigIdx)来访问它们。

“< pwork > /的名字

类似于PWork,除了特定的的名字

“模式”

模式向量。它假设您使用LibBlockMode(“”,lcv sigIdx)来访问它。

“PZC”

以前的零交点的状态。它假设您使用LibPrevZCState(“”,lcv sigIdx)来访问它。

自己的向量基于块的区域,你需要走一个指针指向向量。假设向量是由第一个指出PWork,被称为的名字,

数据类型* buf =(数据类型*)% < LibBlockPWork(名称、”“、”“,0)%辊sigIdx = RollRegions lcv = RollThreshold,块,…“滚”,rollVars * buf + + =不管;% endroll

注意:在上面的例子中,sigIdx液位控制阀是当地的身体循环。

%断点

TLC调试器设置断点。看到<一个href="//www.tatmou.com/jp/jp/help/rtw/tlc/using-the-tlc-debugger.html" class="a">%断点指令

%的功能
%返回
% endfunction

被定义为一个函数,这个函数返回一个值

%函数名(可选参数)% % endfunction返回值

一个void函数不会产生输出,不需要返回一个值。它被定义为

% % endfunction函数名(可选参数)空白

一个函数,产生输出到当前流和不需要返回值被定义为

% % endfunction函数名(可选参数)输出

对于块目标文件,您可以添加到您的内联.tlc文件由model-wide调用以下函数,在代码生成目标文件。

%的功能BlockInstanceSetup(块,系统)无效

呼吁每个实例内的块模型。

%的功能BlockTypeSetup(块,系统)无效

一旦呼吁每个块类型在模型中存在。

%的功能启用(块,系统)输出

使用这个如果启用了块被放置在一个子系统,子系统启用时采取具体行动。在一个子系统启用程序。

%的功能禁用(块,系统)输出

使用这个如果残疾人块被放置在一个子系统,子系统时采取特定的行动是禁用的。在一个子系统禁用程序。

%的功能开始(块,系统)输出

包括该函数如果你已经启动初始化代码块需要放在MdlStart

%的功能InitializeConditions(块,系统)输出

使用这个函数如果你需要初始化块状态,在执行和当一个子系统启用重置状态。在MdlStart和/或子系统初始化例程。

%的功能输出(块,系统)输出

你的主要功能块。在MdlOutputs

%的功能更新(块,系统)输出

使用这个函数如果你每模拟块操作执行一次循环,如更新离散状态。在MdlUpdate

%的功能衍生品(块,系统)输出

使用这个函数如果你的块衍生品。

%的功能ZeroCrossings(块,系统)输出

使用这个函数如果你的块并讨论二阶导数过零检测和执行行动MdlZeroCrossings

%的功能终止(块,系统)输出

使用这个函数如果你的块操作需要MdlTerminate

% foreach
% endforeach

多个迭代的包容0upperLimit-1整型常量表达式。每通过一次循环,loopIdentifier(例如,x)当前迭代分配值。

% foreach loopIdentifier = upperLimit %打破——使用这个退出循环%继续使用这个跳过下面的代码,继续下一次迭代% endforeach

注意:upperLimit表达式是演员TLC整数值。的loopIdentifier是本地循环体。

%的

多个包含指令的语法

% ident1 = const-exp1、const-exp2 ident2 =身体const-exp3 % % % % endbody % endfor继续

第一个部分%的指令是相同的% foreach声明。的%打破%继续指令行为和他们做的一样% foreach指令。const-exp2是一个布尔表达式,表明循环是否应该滚(看到了吗%卷如上图所示)。

如果const-exp2计算结果为真正的,ident2分配的价值const-exp3。否则,ident2分配一个空字符串。

注意:ident1ident2以上都是本地循环体。

% openfile
% selectfile
% closefile

这些都是用来管理文件创建的。语法

% openfile streamId = "文件名。ext”模式{开放写作}% selectfile streamId{选择一个打开的文件}% closefile streamId{关闭开放文件}

请注意,“请确保“是可选的。如果没有指定一个文件名,一个变量(字符串缓冲区)命名streamId创建包含输出。模式参数是可选的。如果指定,它可以“一个”附加或“w”为写作。

注意特殊字符串streamIdNULL_FILE没有指定输出。特殊的字符串streamIdSTDOUT指定输出到终端。

创建一个缓冲区的文本,使用

% openfile缓冲文本放置在“缓冲”变量。% closefile缓冲

现在缓冲包含扩展文本之间的指定% openfile% closefile指令。

%生成

%生成黑色fn相当于生成(黑色,fn)

%生成黑色fn类型相当于生成(黑色,fn,类型)

看到<一个href="//www.tatmou.com/jp/jp/help/rtw/tlc/target-language-compiler-directives.html" class="intrnllnk">生成和GENERATE_TYPE功能

% undef

% undefvar消除了变量var从范围。如果var一个字段在一个记录,% undef从记录中删除该字段。如果var是一个数组,记录% undef删除整个记录数组中。

评论

你可以在任何地方地方评论在目标文件。包括评论,使用/ %…% /% %指令。例如:

/ %文摘:返回(宽度)的领域,如果字段是宽% /

% endfunction % %输出函数

使用% %构建了基于行的注释。中的人物% %线的结束成为评论。

摘要行,行不%作为他们的第一个非空白字符开始,逐字复制到输出缓冲区。例如,

/ *初始化sysNumber * / int sysNumber = 3;

两行复制到输出缓冲区。

包括评论,不开始%字符,您可以使用/ %…% /% %指示发表评论。在这些情况下,言论是不复制到输出缓冲区。

请注意

如果没有导向性的线出现在一个函数,它不是复制到输出缓冲区函数是一个输出函数或除非你专门选择一个输出文件使用% selectfile指令。关于函数的更多信息,请参阅<一个href="//www.tatmou.com/jp/jp/help/rtw/tlc/target-language-compiler-directives.html" class="intrnllnk">目标语言功能

线延续

您可以使用C语言<一个class="indexterm" name="d123e7099">\字符或MATLAB序列<一个class="indexterm" name="d123e7108">继续一行。如果一个指令太长一行很方便的适应,这允许您将<一个class="indexterm" name="d123e7115">指令到多个行。例如:

%辊sigIdx = RollRegions lcv = RollThreshold,块,rollVars \“滚”

%辊sigIdx = RollRegions lcv = RollThreshold,块,……“滚”,rollVars

请注意

使用\抑制换行输出和省略指示线延续。请注意,\和省略不能用在字符串。

目标语言值类型

此表显示了类型的值的上下文中可以使用表达式在您的目标语言文件。表情在目标语言编译器必须使用这些类型。

值类型的字符串 例子 描述

“布尔”

1 = = 1

比较的结果或其他布尔操作符。结果将是TLC_TRUETLC_FALSE

“复杂”

3.0 + 5.0我

64位双精度复数(在目标机器上)。

“Complex32”

3.0 f + 5.0 fi

32位单精度复数(浮动在目标机器上)。

“文件”

% openfile x

字符串缓冲了% openfile

“文件” % openfile x = " out.c "

文件打开% openfile

“功能”

%函数foo

用户定义函数和TLC_FALSE否则。

“高斯”

3 + 5

32位整数虚数(int在目标机器上)。

“标识符” 美国广播公司

标识符值只能在出现模型.rtw文件,不能出现在表达式(表达式的上下文内,标识符是解释为值)。对一个标识符值比较,使用一个字符串;标识符将被转换成一个字符串。

“矩阵”

矩阵(2)[[1,2];(3、4);[5,6]]

向量的矩阵只是列表。矩阵的单个元素不需要相同的类型,可以是任何类型,除了支持向量或矩阵。金宝app的矩阵(2)文本的示例中是可选的。

“数量”

15

整数(int在目标机器上)。

“范围”

[1:5]

之间的整数范围1和5,包容。

“真正的” 3.14159

浮点数(在目标机器上),包括指数表示法。

“Real32”

3.14159度

32位单精度浮点数(浮动在目标机器上)。

“范围”

块{…}

块记录。

“特殊”

FILE_EXISTS

特殊的内置函数,如FILE_EXISTS

“字符串”

“你好,世界”

ASCII字符字符串。在所有情况下,连续两个字符串连接起来以形成最终的价值,如“你好”、“世界”结合形成“你好,世界”。这些字符串包括ANSI®C标准的转义序列等\ n,r \,\ t等。使用行连续字符(例如,\)在字符串是非法的。

“子系统”

< sub1 >

系统标识符。在扩大的背景下,小心地逃脱子系统标识符分隔符,如% < x = = <子\ > >

“无符号”

15 u

32位无符号整数(无符号整型在目标机器上)。

“无符号高斯”

3 u + 5的ui

32位的复杂的无符号整数(无符号整型在目标机器上)。

“向量”

[1,2]或者BR向量(2)[1,2]

向量是值的列表。矢量的单个元素不需要相同的类型,可以是任何类型,除了支持向量或矩阵。金宝app

目标语言表达

你可以包括一个<一个class="indexterm" name="d123e7452">的表达形式<一个class="indexterm" name="d123e7458">% <表达式>在目标文件中。目标语言编译器取代% <表达式>以重置价值计算基于内变量的类型% < >操作符。<一个class="indexterm" name="d123e7476">整数常量表达式是折叠的,取而代之的是由此产生的价值;<一个class="indexterm" name="d123e7482">字符串常量是连接(例如,连续两个字符串“一个”“b”,取而代之的是“ab”)。

% <表达式> / *评估表达式。*运营商包括大多数标准C *标量的操作。数组索引需要* * block-scoped在某些参数.rtw文件。* /

一个表达式的上下文内,每个标识符必须评估目前一个标识符或函数参数范围。您可以使用% < >一行指令来执行<一个class="indexterm" name="d123e7502">文本替换。包括>字符替换,你必须摆脱它\的性格。例如:

% < x \ > 1 ?“ABC”: " 123 " >

运营商需要>性格是逃跑的是以下:

操作符 描述 例子
>

大于

y = % < x \ > 2 >;
> =

大于或等于

y = % < x \ > = 3 >;
> >

正确的转变

y = % < x \ > \ > 4 >;

表<一个href="//www.tatmou.com/jp/jp/help/rtw/tlc/target-language-compiler-directives.html" class="intrnllnk">目标语言表达列出了<一个class="indexterm" name="d123e7561">操作符允许表达式。在这个表中,<一个class="indexterm" name="d123e7568">表达式中列出的顺序从最高到最低优先级。水平线区分的顺序操作。

在C语言中表达式、条件<一个class="indexterm" name="d123e7577">运营商是短路。如果表达式包含一个函数调用与效果,注意到好像影响整个表达式没有完全评估。例如:

%如果存在(foo) & & foo = = 3

如果第一项表达式的计算结果为一个布尔false(例如,喷火不存在),第二项(foo = = 3)不是评估。

在即将到来的表,请注意数字是下列之一:

  • 布尔

  • 数量

  • 无符号

  • 真正的

  • Real32

  • 复杂的

  • Complex32

  • 高斯

  • UnsignedGaussian

另外,请注意,积分是下列之一:

  • 数量

  • 无符号

  • 布尔

看到<一个href="//www.tatmou.com/jp/jp/help/rtw/tlc/target-language-compiler-directives.html" class="intrnllnk">薄层色谱数据的促销活动促销信息,结果当目标语言编译器作用于混合类型的表达式。

目标语言表达

表达式

定义

常数

恒定的参数值。的值可以是一个向量或矩阵。

变量名

都会有效范围内的变量名,包括当地的功能范围,如果有的话,和全球范围。

::变量名

使用函数表明,函数范围内变量抬头时被忽略。这种访问全球范围。

expr (expr)

索引数组参数。数组下标的范围从0n - 1。这个语法是用来索引向量,矩阵,和重复范围变量。

expr ([expr [expr)…])

函数调用或<一个class="indexterm" name="d123e7700">宏扩展。括号外的表达式的函数/宏名称;里面的表达式的参数是函数或宏。

注意:宏是基于文本;他们不能在同一表达式使用其他运营商。

expr。expr

第一个表达式必须有一个有效的范围;第二个表达式是范围内的参数名称。

(expr)

使用<一个class="indexterm" name="d123e7721">()覆盖的<一个class="indexterm" name="d123e7726">优先级的操作。

expr !

逻辑否定(生成TLC_TRUETLC_FALSE)。参数必须是一个数字或布尔。

expr

一元-否定表达。参数必须是一个数字。

+ expr

没有影响;操作数必须是一个数字。

~ expr

位操作运算对象的否定。参数必须是一个整数。

expr * expr

增加两个表达式;操作数必须是一个数字。

expr / expr

把两个表达式;操作数必须是一个数字。

expr % expr

需要整模的表达式;操作数必须是整数。

expr + expr

适用于数字类型、字符串、向量,矩阵,并记录如下:

数字类型:添加两个表达式;操作数必须是一个数字。

字符串:字符串连接。

向量:如果第一个参数是一个矢量,第二个是一个标量,标量是附加到向量。

矩阵:如果第一个参数是一个矩阵,第二个是一个向量的矩阵的列宽,与另一个行向量是附加矩阵。

记录:如果第一个参数是一个记录,第二个参数是添加作为一个参数标识符(其当前值)。

注意,加法操作符是联想。

expr - expr

减去两个表达式;操作数必须是一个数字。

expr < < expr

相当于Left-shifts左操作数的右操作数;参数必须是整数。

expr > > expr

相当于Right-shifts左操作数的右操作数;参数必须是整数。

expr > expr

测试第一个表达式是否大于第二个表达式;参数必须是数字。

expr < expr

测试第一个表达式是否小于第二个表达式;参数必须是数字。

expr > = expr

测试第一个表达式是否大于或等于第二个表达式;参数必须是数字。

expr < = expr

测试第一个表达式是否小于或等于第二个表达式;参数必须是数字。

expr = = expr

测试两个表达式是否相等。

expr ! = expr

测试两个表达式是否不相等。

expr & expr

执行位操作和两个参数;参数必须是整数。

expr ^ expr

执行两个参数的位操作XOR;参数必须是整数。

expr | expr

两个参数的位操作或执行;参数必须是整数。

expr & & expr

执行的逻辑,两个参数并返回TLC_TRUETLC_FALSE。这可以用于数字或布尔参数。

expr | | expr

执行的逻辑或两个参数并返回TLC_TRUETLC_FALSE。这可以用于数字或布尔参数。

expr吗?expr: expr

测试第一个表达式TLC_TRUE。如果这是真的,第一个表达式返回;否则,返回第二个表达式。

expr, expr

返回第二个表达式的值。

请注意

关系运算符(< = <、>、> =、! =、= =)可以用于非限定的值。

你不需要的表达式% < >eval当他们出现在指令行格式。这样做会导致双重评估。

薄层色谱数据的促销活动

当目标语言编译器作用于混合类型的表达式,它促进常见的结果显示在下表中。

表使用以下缩写:

B

布尔

N

数量

U

无符号

F

Real32

D

真正的

G

高斯

UG

UnsignedGaussian

C32

Complex32

C

复杂的

第一行第一列(粗体)和(粗体)类型的表达式中使用的操作。十字路口的行和列显示了生成的类型的表达式。

例如,如果操作涉及一个布尔表达式(B)和一个无符号表达式(U),结果将是一个无符号表达式(U)。

数据类型所产生的混合类型的表达式

B N U F D G UG C32 C
B B N U F D G UG C32 C
N N N U F D G UG C32 C
U U U U F D UG UG C32 C
F F F F F D C32 C32 C32 C
D D D D D D C C C C
G G G UG C32 C G UG C32 C
UG UG UG UG C32 C UG UG C32 C
C32 C32 C32 C32 C32 C C32 C32 C32 C
C C C C C C C C C C

格式化

默认情况下,目标语言编译器输出浮点数与16位精度的指数表示法。要覆盖默认的,使用指令

% realformat字符串

如果字符串“指数”,标准指数表示法与16位精度的使用。如果字符串“简洁”,编译器使用内部启发式输出值在一个更可读的形式,同时保持精度。的% realformat指令集的默认格式真正的数字输出所选风格的其余部分处理或直到它遇到另一个% realformat指令。

条件包含

的<一个class="indexterm" name="d123e8277">条件包含指令

%如果常数表达式<一个class="indexterm" name="d123e8286">其他的%<一个class="indexterm" name="d123e8290">% elseif常数表达式<一个class="indexterm" name="d123e8294">% endif %开关常数表达式%例常数表达式% % % endswitch违约

%如果

常数表达式必须评估一个整数的表达式。它控制包含以下行,直到遇到其他的%,% elseif,或% endif指令。如果常数表达式计算结果为0,不包括指令后的线。如果常数表达式评估以外的一个整数值0后的线%如果指令包括直到% endif,% elseif,或其他的%指令。

当编译器遇到一个% elseif指令,没有之前%如果% elseif编译器指令评估非零,计算表达式。如果该值为0,线后% elseif不包括指令。如果该值为非零,之后的行% elseif指令包括,直到后来其他的%,% elseif,或% endif指令。

其他的%指令包含源文本如果前面开始% elseif语句或原%如果声明评估0;否则,它阻止了包含后续行包括以下% endif

常数表达式可以包含任何表达式中指定吗<一个href="//www.tatmou.com/jp/jp/help/rtw/tlc/target-language-compiler-directives.html" class="intrnllnk">目标语言表达

%开关

%开关声明对常数表达式并将这些表达式出现在%的情况选择器。如果找到匹配,身体的%的情况包括;否则,%的默认包括在内。

%例…%的默认身体流在一起,C,和%打破必须退出使用switch语句。%打破出口最近的封闭%开关,% foreach,或%的循环的出现。例如,

%开关(类型)<一个class="indexterm" name="d123e8399">%例x / *匹配变量x。* / / *注意:任何有效的TLC类型是允许的。* / %例“罪恶”/ *匹配罪或失败情况下x。* /<一个class="indexterm" name="d123e8403">% / *出口开关。* / %例/ *比赛获得“增益”。* / %打破<一个class="indexterm" name="d123e8407">%违约/ * x不匹配,“罪”或“获得”。* /<一个class="indexterm" name="d123e8411">% endswitch

总的来说,这是一种更具可读性%如果/ % elseif / %建设。

多包容

% foreach

的语法% foreach多个包含指令

% foreach标识符=常数表达式<一个class="indexterm" name="d123e8439">%打破<一个class="indexterm" name="d123e8443">%继续<一个class="indexterm" name="d123e8447">% endforeach

常数表达式必须评估一个整数表达式,然后决定执行的次数foreach循环。的标识符增加从0一个小于指定的数量。在foreach循环,您可以使用x,在那里x是标识符,来访问变量的标识符。%打破%继续是可选的指令,您可以包括在吗% foreach指令:

  • 使用%打破退出最近的封闭%的,% foreach,或%开关声明。

  • 使用%继续开始下一个迭代的循环。

%的

请注意

%的指令功能,但不推荐它。相反,使用%卷,它提供了同样的能力以更开放的方式。不使用代码生成器%的构造。

的语法%的多个包含指令

% ident1 = const-exp1、const-exp2 ident2 = const-exp3<一个class="indexterm" name="d123e8512">%的身体<一个class="indexterm" name="d123e8516">%打破%<一个class="indexterm" name="d123e8520">继续<一个class="indexterm" name="d123e8524">% endbody<一个class="indexterm" name="d123e8528">% endfor

第一个部分%的指令是相同的% foreach声明,它导致一个循环执行0n - 1次循环的主体。在正常情况下,它只包括之间的界线%的身体% endbody和之间的线%的%的身体,忽略了之间的界线% endbody% endfor

%打破%继续指令行为和他们做的一样% foreach指令。

const-exp2是一个布尔表达式,表明循环是否应该滚。如果const-exp2是真的,ident2获得的价值const-exp3;否则它接收空字符串。循环滚时,线之间%的% endfor都包含在输出一次。ident2指定的标识符用于测试循环是否体内滚。例如,

%为指数= < NumNonVirtualSubsystems > 3, rollvar =“我”{int我;(我= 0;我< % < NumNonVirtualSubsystems >;我+ +){%身体x [% < rollvar >] = system_name (% < rollvar >);% % endfor endbody}}

如果nonvirtual子系统(NumNonVirtualSubsystems)大于或等于3,循环,导致循环中的代码生成一次。在这种情况下,指数= 0

如果循环不滚,文本之前和之后的身体循环生成被忽略和身体NumNonVirtualSubsystems次了。

这种机制使每个循环控制是否应该滚。

%卷

的语法%卷多个包含指令

%卷ident1= roll-vector-exp ident2 = threshold-exp,……block-exp[,字符串类型,exp-list]] %打破% % endroll继续

这句话使用了roll-vector-exp扩大的主体%卷在多次声明% foreach声明。如果提供了范围roll-vector-exp这比范围threshold-exp表情,循环会滚动。当一个循环,循环的主体扩大,标识符(ident2)提供阈值表达式设置循环控制变量的名称。如果没有指定范围大于阈值,该语句是相同的% foreach声明。例如,

%辊Idx = 1 2 3:5 6 7:10, lcv = 10, ablock % endroll

在这种情况下,身体的%卷声明扩大10倍,如% foreach声明中,因为没有区域大于或等于10。Idx数从1到10,液位控制阀设置为空字符串,”“

当目标语言编译器确定一个给定的块会滚动,它执行GENERATE_TYPE函数调用输出循环的各个部分(除了身体)。使用默认的类型;您可以覆盖这与您指定的字符串类型。额外的参数传递给%卷声明中提供这些专用函数作为参数。被调用的函数是这四个功能:

RollHeader(块,…)这个函数被调用一次这个滚动向量的第一部分会滚。它应该返回一个字符串,该字符串是分配给液位控制阀的身体内%卷声明。

LoopHeader(块,StartIdx Niterations Nrolled,…)这个函数被调用之前曾经每个部分,将身体的%卷声明。

LoopTrailer(块,Startidx Niterations Nrolled,…)这个函数被调用一次后,将每个部分的主体%卷声明。

RollTrailer(块,…)这个函数被调用的最后一次%卷声明如果任何范围引起循环滚动。

这些函数应该输出特定于语言的声明,循环代码等等作为循环需要生成代码。

的一个例子Roller.tlc文件是

%实现辊“C”%函数RollHeader(块)输出{int我;%(“我”)% endfunction %函数返回LoopHeader(块,StartIdx、Niterations Nrolled)输出(i = % < StartIdx >;我< % < Niterations + StartIdx >;我+ +){% endfunction %函数LoopTrailer(块,StartIdx Niterations Nrolled)输出}% endfunction %函数RollTrailer} % endfunction(块)输出

请注意

目标语言编译器函数库提供了代码生成器能够提取参考块I / O和其他代码生成器向量大大简化的主体%卷声明。这些功能包括LibBlockInputSignal,LibBlockOutputSignal,LibBlockParameter,LibBlockRWork,LibBlockIWork,LibBlockPWork,LibDeclareRollVars,LibBlockMatrixParameter,LibBlockParameterAddr,LibBlockContinuousState,LibBlockDiscreteState。(见参考页面的函数<一个href="//www.tatmou.com/jp/jp/help/rtw/tlc/input-signal-functions.html" class="a">输入信号的函数,<一个href="//www.tatmou.com/jp/jp/help/rtw/tlc/output-signal-functions.html" class="a">输出信号的函数,<一个href="//www.tatmou.com/jp/jp/help/rtw/tlc/parameter-functions.html" class="a">参数的函数,<一个href="//www.tatmou.com/jp/jp/help/rtw/tlc/block-state-and-work-vector-functions.html" class="a">向量函数块状态和工作)。这个库还包含一个默认的实现Roller.tlc作为一个“平”轮。

扩展卷的前的例子一个循环,

%的语言“C”%分配ablock =块{名称“嗨”}%辊Idx =[1:20, 21日22日23:25,26:46],lcv = 10, ablock块[% < lcv = =“”?Idx lcv >): * = 3.0;% endroll

这个目标语言编译器代码产生该输出:

{int我;(i = 1;我< 21岁;我+ +){块[我]* = 3.0;}块[21]* = 3.0;块[22]* = 3.0;块[23]* = 3.0;块[24]* = 3.0;块[25]* = 3.0;(我= 26; i < 47; i++) { Block[i] *= 3.0; } }

面向对象的工具生成目标代码

目标语言编译器提供了一个简单的<一个class="indexterm" name="d123e8733">面向对象的工具。语言指令

%<一个class="indexterm" name="d123e8741">语言字符串%<一个class="indexterm" name="d123e8745">generatefile %<一个class="indexterm" name="d123e8749">实现了

该设备是专门为<一个class="indexterm" name="d123e8755">定制仿真软件的代码块,但也可以用于其他用途。金宝app

%的语言

%的语言指令指定了<一个class="indexterm" name="d123e8771">目标语言生成。应作为一个一致性检验来验证实现文件发现语言生成。的%的语言指令必须出现之前生成GENERATE_TYPE内置的函数调用。%的语言指定为字符串的语言。例如:

%的语言“C”

金宝app仿真软件模块有一个类型参数。这个参数是一个字符串,指定块的类型,例如“罪”“获得”。面向对象的工具使用这类搜索路径文件实现块。默认情况下,文件的名称类型块的.tlc附加,举个例子,如果类型“罪”编译器将搜索“Sin.tlc”沿着小路往前走。你可以覆盖默认的文件名使用% generatefile指令指定您想要使用的文件名替换默认文件名。例如,

% generatefile“罪恶”“sin_wave.tlc”

实现的文件必须包含一个屏蔽一些代码%实现指令指示类型和语言实现。目标语言编译器将生成一个错误如果%实现指令不匹配。例如,

%实现“罪恶”“逾越节”

会导致一个错误如果最初的语言选择是C。

你可以使用一个文件来实现多个目标语言通过指定所需的语言在一个向量。例如,

%实现“罪恶”“C”

最后,您可以使用通配符(实现几种类型*类型字段):

% *实现“C”

请注意

使用通配符(*)不推荐,因为它放松的错误检查%实现指令。

生成和GENERATE_TYPE功能

目标语言编译器有两个内置函数调度面向对象调用,生成和<一个class="indexterm" name="d123e8850">GENERATE_TYPE。您可以调用一个函数出现在一个实现文件(从指定的文件以外)只有通过使用生成GENERATE_TYPE特殊的功能。

生成。生成函数接受两个或两个以上的输入参数。第一个参数必须是一个有效范围和第二个字符串包含要调用的函数的名称。的生成函数通过第一个块参数和任何额外的参数指定被调用的函数。返回参数的值(如果有的话)返回的函数被调用。注意,编译器会自动“作用域”或将第一个参数添加到列表的范围如果出现在搜索%,指示线。(见<一个href="//www.tatmou.com/jp/jp/help/rtw/tlc/target-language-compiler-directives.html" class="intrnllnk">变量作用域)。这个范围函数返回时被删除。

GENERATE_TYPE。GENERATE_TYPE函数接受三个或多个输入参数。它处理的第一个两个参数相同生成函数调用。第三个参数是类型;仿真软件的块中指定的类型将被忽略。金宝app该设备用于处理功能代码生成的构建过程。块类型功能,但目标语言编译器生成指定的特定功能GENERATE_TYPE。例如,

GENERATE_TYPE(块,“输出”、“dp_read”)

指定函数的类型是dp_read

参数和任何额外的参数传递给被调用的函数。就像生成内置函数,编译器会自动范围前的第一个参数GENERATE_TYPE函数输入然后删除范围在返回。

在这个文件包含%实现,函数调用抬头首先在这个文件,然后在全球范围。这使得它可能隐藏当前所专用的辅助函数对象。

请注意

它不是一个错误生成GENERATE_TYPE指示找不到匹配的函数。这是为了防止规格要求空块代码生成的所有方面。使用GENERATE_FUNCTION_EXISTSGENERATE_TYPE_FUNCTION_EXISTS指令来确定指定的函数是否真的存在。

输出文件控制

的结构<一个class="indexterm" name="d123e8925">输出文件控制构造

%<一个class="indexterm" name="d123e8930">openfile字符串optional-equal-string optional-mode %<一个class="indexterm" name="d123e8934">closefile id %<一个class="indexterm" name="d123e8938">selectfile id

% openfile

% openfile指令打开一个文件或缓冲<一个class="indexterm" name="d123e8948">写作;所需的字符串变量类型的变量文件。例如,

% openfile x / %打开,选择x写作。% / % openfile =”。h”/ %打开”。h”写作。% /

% selectfile

% selectfile指令选择变量指定的文件作为当前的输出流。选择输出到文件到另一个文件% selectfile。例如,

% selectfile x / %选择文件的输出。% /

% closefile

% closefile指令关闭指定的<一个class="indexterm" name="d123e8973">文件或缓冲区。如果关闭实体是当前选中的输出流,% closefile调用% selectfile重新选择以前选定的输出流。

有两种可能的情况% closefile必须处理:

  • 如果流是一个文件,相关的变量是好像被删除% undef

  • 如果流是一个缓冲区,相关变量接收的文本输出到流中。例如,

    %分配x = " / %创建一个空字符串。% / % openfile x“hello, world”% closefile x / % x = % /“hello, world \ n”

如果需要,您可以附加到一个输出<一个class="indexterm" name="d123e8999">文件或使用可选的字符串模式,一个,如

% openfile“foo。c”、“% %”打开foo。附加的c。

输入文件控制

的<一个class="indexterm" name="d123e9010">输入文件控制指令

%<一个class="indexterm" name="d123e9015">包括字符串<一个class="indexterm" name="d123e9019">% addincludepath字符串

%包括

%包括指令所指定的目标文件的搜索路径字符串和包括的内容<一个class="indexterm" name="d123e9031">文件内嵌在的地方%包括声明中出现。

% addincludepath

% addincludepath指令添加一个额外的<一个class="indexterm" name="d123e9043">包括搜索路径时,目标语言编译器的引用%包括目标文件或块。语法

% addincludepath字符串

字符串可以是一个绝对路径或一个显式的相对路径。例如,指定一个绝对的<一个class="indexterm" name="d123e9054">路径,使用

% addincludepath“C: \ \ folder1 \ \ folder2”(PC) % addincludepath / folder1 / folder2”(UNIX)

指定一个相对<一个class="indexterm" name="d123e9064">路径,路径必须显式地开始。例如,

% addincludepath”。\\folder2" (PC) %addincludepath "./folder2" (UNIX)

请注意,对于电脑,必须将反斜杠转义(翻倍)。

指定一个显式的相对路径时,文件夹添加到目标语言编译器搜索路径是由连接目标文件,其中包含的位置% addincludepath指令和明确的相对路径。

目标语言编译器搜索文件夹下面<一个class="indexterm" name="d123e9081">为目标或包含文件:

  1. 当前文件夹。

  2. 包括路径中指定% addincludepath指令。编译器对多个% addincludepath指令的自底向上

  3. 包括在命令行通过指定路径-我。编译器对多个-我选择从右到左

通常情况下,% addincludepath指示应在系统中指定的目标文件。多个% addincludepath指令将多条路径添加到目标语言编译器搜索路径。

请注意

编译器会搜索MATLAB路径,不会找到一个可用的文件只在这条道路。编译器只搜索上面描述的位置。

断言,错误、警告和调试消息

相关的断言,<一个class="indexterm" name="d123e9126">错误、警告和调试消息指示

%<一个class="indexterm" name="d123e9136">断言表达式%<一个class="indexterm" name="d123e9140">错误标记%<一个class="indexterm" name="d123e9144">警告牌%<一个class="indexterm" name="d123e9148">跟踪令牌%<一个class="indexterm" name="d123e9152">退出令牌

这些指令产生错误、警告或跟踪消息目标文件时检测到一个错误条件,或<一个class="indexterm" name="d123e9158">需要跟踪。一行指令后的令牌成为生成的错误或警告消息的一部分。

目标语言编译器生成的消息的地方%的跟踪stderr当且仅当您指定详细模式开关(- v)到目标语言的编译器。看到<一个href="//www.tatmou.com/jp/jp/help/rtw/tlc/command-line-arguments.html" class="a">命令行参数关于开关的额外信息。

%断言指令计算表达式并产生一个堆栈跟踪如果表达式的求值结果为一个布尔值

请注意

为了让%断言指令是评估,使TLC断言必须选择的薄层色谱过程部分的代码生成>调试窗格。默认操作%断言指令不被评估。

%的退出指令报告错误并停止进一步的编译。

内置函数和值

下表列出了内置函数和值添加到列表的参数出现在模型.rtw文件。这些目标语言编译器中定义的函数和值是大写,这样他们在视觉上不同于其他参数模型.rtw文件,按照惯例,从用户定义的参数。

TLC内置函数和价值观

内置的函数名 扩张

(expr expr)

第一个表达式必须是一个字符串表中对应的类型名称<一个href="//www.tatmou.com/jp/jp/help/rtw/tlc/target-language-compiler-directives.html" class="intrnllnk">目标语言值类型,第二个表达式将铸型。一个典型的使用可能会将一个变量在一个真正的格式

铸造(“真实”,变量名)

这方面的一个例子为S-functions处理参数值。C或c++代码中使用它们,你需要定型真正的如这一个值1将格式化1.0(见也% realformat)。

存在(var)

如果var标识符并不是目前在范围、结果TLC_FALSE。如果标识符是在范围、结果TLC_TRUEvar可以是一个单一的标识符或涉及一种表达吗[]操作符。

函数宏指令(matlab-command,
TLC-expressions)

在MATLAB环境下进行一个评估。例如,

% =函数宏指令分配结果(“罪”,3.14159)

% matlab指令可用于调用MATLAB函数不返回结果。例如,

% matlab disp (2.718)

注意:如果MATLAB函数返回多个值,TLC只接收第一个值。

FILE_EXISTS(expr)

expr必须是一个字符串。如果一个文件的名字expr不存在的道路上,结果是什么TLC_FALSE。如果该名称的文件存在路径,结果是TLC_TRUE

格式(realvalue,格式)

第一个表达式真正的值的格式。第二个表达式指数简洁的。输出真正的值在指定格式,指数使用指数表示法与16位精度的,简洁的输出数量在一个更可读的格式,同时保持数值精度。

字段名(记录)

返回一个字符串数组,其中包含字段名称与记录相关的记录。因为它返回一个字符串排序的列表,函数O (n * log (n))

GETFIELD(记录,
“字段名”
)

返回的内容指定的字段名,字段名是否与记录。函数使用哈希查找,因此在常数时间执行。

生成(记录,
函数名,……)

执行函数调用映射到特定记录类型(即。块记录功能)。例如,使用这个执行的函数.tlc内置文件块。不是TLC自动“作用域”或将第一个参数添加到列表的范围如果出现在搜索%,指示线。

GENERATE_FILENAME(类型)

为指定的记录类型,.tlc文件存在吗?使用这个,看看GENERATE_TYPE电话将会成功。

GENERATE_FORMATTED_VALUE
(expr,字符串,扩大)

可能返回一个多行字符串,可以用来声明的价值(s)expr在当前的目标语言。第二个参数是一个字符串作为变量名的一个描述性的评论的第一行返回字符串。如果第二个参数是空字符串,”“,然后不放入输出字符串描述性注释。第三个参数是一个布尔值,当真正的原因expr扩大到原始文本输出。扩大= TRUE比默认使用更多的内存();集扩大= TRUE只有参数文本需要处理之前因为某些原因被写入磁盘。

例如,

静态常量unsigned char[] =内容

% = GENERATE_FORMATTED_VALUE (SFcnParamSettings分配值。内容”、“TLC_FALSE)

;

收益率这个C代码:

静态常量unsigned char[]内容= {0 u, 1 u、2 u, 3 u 4 u};

GENERATE_FUNCTION_EXISTS
(记录,函数名)

确定一个给定的块函数存在。第一个表达式是一样的第一个参数生成,即一块作用域包含一个变量类型。第二个表达式是一个字符串应该匹配函数名。

GENERATE_TYPE
(记录、函数名、
类型,…)

类似于生成,除了类型覆盖了类型字段的记录。用这个当执行函数映射到具体的功能块记录(即基于s函数名称。,这个名字成为类型)。

GENERATE_TYPE_FUNCTION_EXISTS
(记录、函数名、
类型)

一样GENERATE_FUNCTION_EXISTS除了它覆盖类型内置的记录。

GET_COMMAND_SWITCH

返回命令行开关的值。仅支持以下开关:金宝app

v, m p O d博士,r,我,一个
另请参阅<一个href="//www.tatmou.com/jp/jp/help/rtw/tlc/command-line-arguments.html" class="a">命令行参数

IDNUM(expr)

expr必须是一个字符串。结果是一个向量的第一个元素是一家领先的字符串,如果有的话,第二个元素是一个数字出现在输入字符串的结束。例如,

IDNUM (“ABC123”)收益率(“ABC”, 123年)

图像放大(expr)

返回一个复数的虚部。

INT8MAX

127年

INT8MIN

-128年

INT16MAX

32767年

INT16MIN

-32768年

INT32MAX

2147483647

INT32MIN

-2147483648

INTMIN

主机的最小整数值。

INTMAX

最大整数值在主机上。

ISALIAS(记录)

返回TLC_TRUE如果记录是一个引用(符号链接)到一个不同的记录,并且TLC_FALSE否则。

ISEQUAL(expr1 expr2)

两个表达式的数据类型是数字的地方:返回TLC_TRUE如果第一个表达式包含相同的值作为第二个表达式;返回TLC_FALSE否则。

非数字数据类型的表达式(例如,字符串或记录):返回TLC_TRUE当且仅当两个表达式具有相同的数据类型和包含相同的价值;返回TLC_FALSE否则。

ISEMPTY(expr)

返回TLC_TRUE如果表达式包含空字符串,向量,或记录TLC_FALSE否则。

ISFIELD(记录,字段名)

返回TLC_TRUE如果字段名称相关的记录,和TLC_FALSE否则。

ISINF(expr)

返回TLC_TRUE如果表达式的值,TLC_FALSE否则。

ISNAN(expr)

返回TLC_TRUE如果表达式的值,TLC_FALSE否则。

ISFINITE(expr)

返回TLC_TRUE如果表达式的值不是+ / -,TLC_FALSE否则。

ISSLPRMREF(param.value)

返回一个布尔值表示其参数是否对模型参数的引用。金宝app这个函数支持参数与仿真软件分金宝app享;金宝app使用它可以节省内存和时间在代码生成。例如,

%如果! ISSLPRMREF (param.Value)分配参数。值=投(“真实”,param.Value) % endif

NULL_FILE

一个预定义的文件没有输出,您可以使用作为一个参数% selectfile为了防止输出。

NUMTLCFILES

目标文件的数量到目前为止用于扩张。

OUTPUT_LINES

返回的行数,已经写入当前选中文件或缓冲区。不工作STDOUTNULL_FILE

真正的(expr)

返回一个复数的实部。

REMOVEFIELD(记录,字段名)

删除指定的字段内容的记录。返回TLC_TRUE如果字段删除;否则返回TLC_FALSE

ROLL_ITERATIONS ()

返回当前辊区域循环的次数如果不是在一个%卷构造。

SETFIELD(记录,字段名,值)

集的内容与记录相关联的字段名。返回TLC_TRUE如果字段添加;否则返回TLC_FALSE

大小(expr [expr))

计算第一个表达式并生成一个双元素的大小行向量。如果指定第二个操作数,它被用作一个整数索引这行向量;否则将返回整个行向量。大小(x)应用于一个标量返回[1]大小(x)应用于范围返回重复条目的数量范围类型。例如,大小(块)返回

(1 <块数量>)

SPRINTF(格式、var…)

格式的数据变量var(在任何额外的变量参数)的控制下指定的格式字符串,并返回一个包含值的字符串变量。运行C库sprintf (),除了输出返回值,而不是包含在一个参数sprintf

STDOUT

一个预定义的文件stdout输出。你可以使用这个作为参数% selectfile强制输出stdout

字符串(expr)

扩展成一个字符串的表达式;的字符\,\ n,前他们逃跑了吗\(反斜杠)。ANSI转义序列转换为字符串形式。如果% < >表达式,它是逃,这样封闭的字符串不受进一步TLC解释。

STRINGOF(expr)

接受一个向量的ASCII值并返回一个字符串,该字符串是由处理每个元素作为一个字符的ASCII代码。主要用于功能字符串参数。

SYSNAME(expr)

寻找特别的格式化的字符串形式< x > / y并返回xy作为双元素字符串向量。这是用来解析子系统名称。例如,

% < sysname(“<子> /增益”)>

返回

(“子”、“获得”)

写记录,块的名称<sys/ blockname >,在那里sys年代#。您可以获得完整路径名称通过调用LibGetBlockPath(块);这将包括换行和其他导致显示困难的麻烦人物。获得一个完整的路径名适合单行注释,但不完全相同的模型路径名,使用金宝appLibGetFormattedBlockPath(块)

TLCFILES

返回一个向量,其中包含目标文件的名字包括到目前为止的扩张。使用绝对路径。另请参阅NUMTLCFILES

TLC_FALSE

布尔常量等于一个负面评价布尔表达式。

TLC_TRUE

布尔常量等于积极评估布尔表达式。

TLC_TIME

日期和时间的编译。

TLC_VERSION

目标语言的编译器版本和日期。

类型(expr)

评估expr并确定结果类型。这个函数是一个字符串的结果对应于给定的表达式的类型。看到值类型的字符串列在表中<一个href="//www.tatmou.com/jp/jp/help/rtw/tlc/target-language-compiler-directives.html" class="intrnllnk">目标语言值类型可能的值。

UINT8MAX

255 u

UINT16MAX

65535 u

UINT32MAX

4294967295 u

UINTMAX

在主机最大无符号整数的值。

WHITE_SPACE(expr)

接受一个字符串并返回1如果字符串只包含空白字符(,\ t,\ n,r \);否则返回0。

WILL_ROLL(expr1 expr2)

第一个表达式是一个滚动向量和第二个表达式是一卷阈值。这个函数返回真正的如果向量包含一系列卷。

函数宏指令功能

函数宏指令功能和MEX-functions内置函数调用MATLAB文件。结构

%分配结果=函数宏指令(matlab-function-name、rhs1 rhs2,…rhs3、…);

请注意

  • 只允许一个左侧参数时使用函数宏指令

  • 如果你的MATLAB函数评价会导致一个错误,TLC编译器不会终止,但继续执行。函数宏指令的指令TLC返回一个空值。

此表显示了转换,当你使用函数宏指令

MATLAB转换

TLC类型 MATLAB类型
“布尔” 布尔(标量或矩阵)
“数量” (标量或矩阵)
“真正的” (标量或矩阵)
“Real32” (标量或矩阵)
“无符号” (标量或矩阵)
“字符串” 字符串
“向量” 如果向量是均匀的,它被转换为一个MATLAB向量。如果向量是异构的,它被转换为一个MATLAB细胞数组。
“高斯” 复杂的(标量或矩阵)
“UnsignedGaussian” 复杂的(标量或矩阵)
“复杂” 复杂的(标量或矩阵)
Complex32” 复杂的(标量或矩阵)
“标识符” 字符串
“子系统” 字符串
“范围” 扩大的向量双打
“Idrange” 扩大的向量双打
“矩阵” 如果矩阵是同质的,它被转换为一个MATLAB矩阵。如果矩阵是异构的,它被转换为一个MATLAB细胞数组。(细胞阵列可以被嵌套。)
“范围”“记录” 结构元素
范围记录别名 字符串包含完全限定的别名
范围记录数组 单元阵列的结构
上面未列出的其他类型 转换不支持金宝app

从MATLAB返回的值时,转换,这个表所示。注意转换矩阵的二维多不支持,也不转换或沮丧的64位整数的值。金宝app

更多的转换

MATLAB类型 TLC类型
字符串 字符串
向量的字符串

向量的字符串

布尔(标量或矩阵) 布尔(标量或矩阵)
INT8、INT16 INT32
(标量或矩阵)
数量(标量或矩阵)
INT64 不支持金宝app
UINT64 不支持金宝app
复杂的INT8、INT16 INT32
(标量或矩阵)
高斯(标量或矩阵)
UINT8、UINT16 UINT32
(标量或矩阵)
无符号(标量或矩阵)
复杂的UINT8、UINT16 UINT32
(标量或矩阵)
UnsignedGaussian(标量或矩阵)
单精度 Real32(标量或矩阵)
复杂的单精度 Complex32(标量或矩阵)
双精度 真正的(标量或矩阵)
复杂的双精度 复杂的(标量或矩阵)
稀疏矩阵 扩展到矩阵的双打
单元阵列的结构 记录数组
单元阵列的non-structures 向量或矩阵的类型转换类型的元素
单元阵列的结构和non-structures 转换不支持金宝app
结构 记录
对象 转换不支持金宝app

目前不支持其他值类型。金宝app

作为一个例子,这个声明中使用函数宏指令内置函数调用MATLAB的正弦输入参数。

% =函数宏指令分配结果(“罪”,3.14159)

变量(标识符)可以取以下常量值。注意后缀的价值。

常数形式 TLC类型
1.0 “真正的”
1.0 (F / F) “Real32”
1 “数量”
1 (U |) “无符号”
1.0我 “复杂”
1 (Ui | Ui) “UnsignedGaussian”
1我 “高斯”
1.0 (Fi | Fi) “Complex32”

请注意

后缀控制目标语言编译器类型的常数。

此表显示了目标语言MATLAB编译器常数及其等效值。

TLC常量 相当于MATLAB价值
rtInf,, +正
rtMinusInf
rtNan,,
rtInfi,不定式,不定式 正我
rtMinusInfi 负我
rtNaNi,纳尼,纳尼 南*我

薄层色谱保留的常量

对于双精度值,以下是无限的和不是一个数字IEEE定义®价值观:

rtMinusInf rtInf,正,负,rtNaN nan

对于单精确值,这些常数应用:

rtInfF、InfF rtMinusInfF、rtNaNF NaNF

相应的版本当复杂:

不定式,rtInfi rtMinusInfi、不定式rtNaNi(双打)rtInfFi InfFi, rtMinusInfFi, rtNaNFi, NaNFi(单身)

为整数值,以下定义:

INT8MIN、INT8MAX INT16MIN、INT16MAX INT32MIN, INT32MAX, UINT8MAX, UINT16MAX, UINT32MAX, INTMAX, INTMIN UINTMAX

标识符定义

定义或改变<一个class="indexterm" name="d123e10835">变量标识符(TLC),使用指令

%分配[:]表达=常数表达式

这个指令引入了新的标识符(变量)或更改现有的值。左边是一个合格的引用变量使用[]操作符,也可以是一个元素的向量或矩阵。在矩阵的情况下,只有改变了单一元素的任务。

%分配指令将新标识符插入到本地函数范围、文件功能范围,生成文件的范围,或进入全球范围。标识符引入函数作用域不可用在函数被调用,并被从函数返回。标识符插入到全球范围是持久的。你可以改变完全由respecifying他们现有的标识符。常数表达式可以包含合法的标识符.rtw文件。您可以使用% undef删除标识符以同样的方式,您使用它来删除宏。

范围内的一个函数,变量赋值创建新的本地变量,除非你使用::范围解析操作符。在这个示例中,创建了一个变量赋值喷火本地函数,该函数退出时将会消失。

%功能……%分配foo = 3…% endfunction

请注意,喷火即使创建一个全球喷火已经存在。

创建或改变值在全球范围内,您必须使用范围解析操作符(::)来消除歧义,如

%功能…%分配foo = 3%分配:foo = foo……% endfunction

范围解析操作符强制编译器分配局部变量的值喷火3,全局变量喷火

请注意

改变它的值是一个错误的代码生成器文件不合格范围。这个例子不生成一个错误:

%分配CompiledModel.name = "新名称" % %没有错误

这个示例中生成一个错误:

以CompiledModel % %命名= "新名称" % % % endwith错误

创造记录

使用% createrecord指令建立新的记录在当前的范围。例如,如果您想创建一个新记录矩形包含两个项目(例如,“名字”“t”型),使用

% createrecord Rec{名称“名称”;“t”型}

添加记录

使用% addtorecord指令添加新记录现有的记录。例如,如果你有一个记录Rec1包含一个记录Rec2,你想添加一个额外的Rec2,使用

% addtorecord Rec1 Rec2{名称“Name1”;输入“t1”}

这个图显示的结果将记录添加到现有的一个。

如果你想访问新记录,您可以使用

%分配的名字= Rec1.Rec2 [1] . name

在这个例子中,如果你想两个记录添加到现有的记录,使用

% addtorecord Rec1 Rec2{名称“Name1”;输入“t1”} % addtorecord Rec1 Rec2{名称“Name2”;输入“t2”}

这个生产

将参数添加到一个现有的记录

您可以使用%分配指令添加一个新参数现有的记录。例如,

% addtorecord块[Idx] N 500 / %添加N值500块% / %分配myn =块[Idx]。N / %值500% /

添加一个新参数,N现有的块的末尾,名称和现有的变量的当前值,如这个图所示。它返回块的值。

变量作用域

本节讨论如何在目标语言的编译器<一个class="indexterm" name="d123e10955">解析引用变量(包括记录)。

范围在本文档中,有两个相关的意思。首先,范围是一个变量的属性,定义其可见性和持久性。例如,一个变量定义在一个函数的身体是可见的只有在这个函数,它坚持只要执行这个函数。这样的一个变量函数(或本地)范围。每个TLC变量有一个(且只有一个)中描述的范围<一个href="//www.tatmou.com/jp/jp/help/rtw/tlc/target-language-compiler-directives.html" class="intrnllnk">作用域

范围也指一个集合,或者的变量有相同的范围。在一个给定的点在TLC的执行程序中,几个范围可以存在。例如,在执行一个函数,函数范围(本地变量的函数)的存在。在所有情况下,一个全球范围的池(全局变量)也存在。

解决变量引用,薄层色谱维护当前作用域的搜索列表,搜索一个良好定义的序列。描述的搜索序列<一个href="//www.tatmou.com/jp/jp/help/rtw/tlc/target-language-compiler-directives.html" class="intrnllnk">薄层色谱解析变量引用如何

动态范围指TLC的过程创建和重新分配的作用域变量和它们的存在。例如,变量在函数在定义函数执行时只存在范围。

作用域

以下部分描述TLC变量的可能范围。

全球范围。默认情况下,TLC变量具有全局作用域。全局变量是可见的,可以引用,在薄层色谱程序代码。全局变量保存在TLC的执行计划。说属于全局变量全局池

请注意,CompiledModel的记录模型.rtw全球范围文件。因此,您可以访问这个结构从TLC功能或文件。

您可以使用范围解析操作符(::)显式地引用或创建全局变量在一个函数。看到<一个href="//www.tatmou.com/jp/jp/help/rtw/tlc/target-language-compiler-directives.html" class="intrnllnk">范围解析操作符为例子。

请注意,您可以使用% undef指令空闲内存使用的全局变量。

文件范围。变量与文件只可见范围内创建的文件。以这种方式限制变量的范围,使用% filescope指令定义文件的任何地方。

下面的代码片段中,变量fs1fs2有文件范围。请注意,% filescope指令不需要定位在语句创建变量。

%分配fs1 filescope %分配fs2 = 3 = 1%

变量的范围是有限的% filescope的范围在包含它们的执行文件完成。这可以让你自由分配的内存变量。

函数(当地)范围。在身体功能的函数定义的变量范围。也就是说,它们是可见的在和本地定义函数。例如,下面的代码片段中,变量localv本地函数吗喷火。的变量x是全球性的。

x = 3% %分配函数foo (arg) %分配localv = x + localv % endfunction 1%的回报

一个局部变量可以具有相同的名称作为一个全局变量。指在一个函数,名称相同的局部和全局变量,你必须使用范围解析操作符(::)来消除歧义的变量引用。看到<一个href="//www.tatmou.com/jp/jp/help/rtw/tlc/target-language-compiler-directives.html" class="intrnllnk">范围解析操作符为例子。

请注意

函数本身(而不是函数内定义的变量)有全局作用域。有一个例外:函数中定义生成范围是本地范围。看到<一个href="//www.tatmou.com/jp/jp/help/rtw/tlc/target-language-compiler-directives.html" class="intrnllnk">生成范围

%的范围。%,指令添加一个新的范围,称为%的范围当前作用域的列表。这个指令使其更容易参考<一个class="indexterm" name="d123e11058">block-scoped变量。

的结构%,指令是

%<一个class="indexterm" name="d123e11070">以表达式%<一个class="indexterm" name="d123e11074">endwith

例如,指令

与CompiledModel %。系统[sysidx]…% endwith

添加了CompiledModel.System [sysidx]范围搜索列表。这个范围搜索。你可以仅仅通过参考系统名称

的名字

而不是

CompiledModel.System sysidx . name

生成范围。生成范围某些内置函数所使用的是一种特殊的范围,旨在支持代码生成。金宝app这些函数调度函数调用映射到一个特定的记录类型。此功能支持多态性的一种不同的记录金宝app类型与功能(类似于方法)相同的名字。通常情况下,该特性用于地图记录功能,实现不同的功能块类型。

函数,采用生成范围包括生成,GENERATE_TYPE,GENERATE_FUNCTION_EXISTS,GENERATE_TYPE_FUNCTION_EXISTS。看到<一个href="//www.tatmou.com/jp/jp/help/rtw/tlc/target-language-compiler-directives.html" class="intrnllnk">生成和GENERATE_TYPE功能。本节讨论生成使用范围生成内置函数为例。

的语法生成函数是

生成(黑色、fn)

第一个参数(黑色)生成是一个有效的记录名称。第二个参数(fn)是一个函数的名字被派遣。当一个函数通过一个派生成电话,TLC自动添加黑色作用域的列表,搜索变量引用时解决。因此,记录(黑色)是可见的派遣,好像一个隐式函数与<黑色> %……% endwith指令中存在派遣函数。

在这种背景下,命名的记录黑色据说是在生成范围。

三个薄层色谱文件,说明生成的使用范围,下面列出。该文件polymorph.tlc代表两个假想的块类型,创建了两个记录MyBlockYourBlock。每一个记录类型都有一个关联的函数命名aFunc。屏蔽一些实现的aFunc中包含的文件吗MyBlock.tlcYourBlock.tlc

使用生成电话,polymorph.tlc分派函数为每个块类型。请注意,aFunc实现可以参考的MyBlockYourBlock,因为这些记录在生成范围。

  • 下面的清单显示了polymorph.tlc:

    % %变形。薄层色谱%的语言“C”% %create records used as scopes within dispatched functions %createrecord MyRecord { Type "MyBlock"; data 123 } %createrecord YourRecord { Type "YourBlock"; theStuff 666 } %% dispatch the functions thru the GENERATE call. %% dispatch to MyBlock implementation % %% dispatch to YourBlock implementation % %% end of polymorph.tlc
  • 下面的清单显示了MyBlock.tlc:

    % % MyBlock。薄层色谱%实现”MyBlock””C”% %aFunc是我nvoked thru a GENERATE call in polymorph.tlc. %% MyRecord is in generate scope in this function. %% Therefore, fields of MyRecord can be referenced without %% qualification %function aFunc(r) Output %selectfile STDOUT The value of MyRecord.data is: % %closefile STDOUT %endfunction %%end of MyBlock.tlc
  • 下面的清单显示了YourBlock.tlc:

    % % YourBlock。薄层色谱%实现”YourBlock””C”% %aFunc是我nvoked thru a GENERATE call in polymorph.tlc. %% YourRecord is in generate scope in this function. %% Therefore, fields of YourRecord can be referenced without %% qualification %function aFunc(r) Output %selectfile STDOUT The value of YourRecord.theStuff is: % %closefile STDOUT %endfunction %%end of YourBlock.tlc

的调用和输出polymorph.tlc在MATLAB命令窗口中显示,如下所示:

薄层色谱- v变形。薄层色谱的value of MyRecord.data is: 123 The value of YourRecord.theStuff is: 666

请注意

函数中定义生成范围是本地范围。这是一般规则的例外,功能有全局作用域。例如,在上面的示例中,没有的aFunc实现全球范围。

范围解析操作符

范围解析操作符(::)是用来表示,全球范围时应搜索TLC函数查找一个变量引用。范围解析操作符通常用于改变全局变量的值(或者甚至创建全局变量)从内部功能。

通过使用范围解析操作符,您可以解决歧义时出现一个函数名称相同的局部和全局变量的引用。在接下来的例子中,一个全局变量喷火被创建。此外,该函数myfunc创建并初始化一个局部变量命名喷火。这个函数myfunc显式地引用全局变量喷火通过使用范围解析操作符。

%分配foo = 3% %这个变量有全局作用域。%函数myfunc (arg) %分配foo = 3% %这个变量局部作用域%分配::foo =参数% %这改变全局变量foo % endfunction

您还可以使用范围解析操作符在一个函数来创建全局变量。以下函数创建并初始化一个全局变量:

%函数sideffect (arg) %分配::全球=参数% %这将创建一个全局变量% endfunction

薄层色谱解析变量引用如何

本节讨论如何目标语言编译器搜索现有的范围来解决变量引用。

全球范围。在最简单的情况下,目标语言编译器解析变量引用(包括通过搜索全球池CompiledModel结构)。

%的范围。您可以修改搜索列表和搜索序列通过使用%,指令。例如,当你添加以下构造,

与CompiledModel %。系统[sysidx]…% endwith

系统[sysidx]添加到搜索列表范围。这个范围是搜索第一,如这幅图所示。

这种技术可以让你更方便地访问嵌入式的定义。使用%,构造(如前面的示例),只要你可以参考系统名称

的名字

而不是

CompiledModel.System sysidx . name

功能范围。一个函数都有自己的范围。前面描述的搜索范围是添加到列表,如图所示。

例如,下面的代码片段,

与CompiledModel %。系统[sysidx]…%分配一个= foo (x, y)…% endwith…%函数foo (a, b)…分配myvar =的名字……% endfunction…% < foo (1、2) >

如果的名字没有定义在喷火,作业使用的价值的名字从之前的范围,CompiledModel.System SysIdx . name

在一个嵌套函数,只有最里面的功能范围搜索,一起附上%,和全球范围,如下图所示:

文件范围。文件搜索范围在全球范围,如下列图所示。

嵌套的规则文件域嵌套函数类似的范围。在嵌套文件范围的情况下,只有最里面的嵌套文件范围搜索。

目标语言功能

的<一个class="indexterm" name="d123e11295">目标语言构造函数

%函数标识符(可选参数)(输出| void) % % endfunction返回

目标语言中的函数递归和有自己的局部变量空间。目标语言功能不产生输出,除非它们输出函数或显式地使用% openfile,% selectfile,% closefile指令。

函数可以返回一个值%返回指令。返回值可以是一个类型中定义的表<一个href="//www.tatmou.com/jp/jp/help/rtw/tlc/target-language-compiler-directives.html" class="intrnllnk">目标语言值类型

在这个例子中,一个函数,的名字,返回x如果xy是相等的,还是返回z如果xy是不平等的:

%函数名(x, y, z)无效%如果x = = y %其他返回x % % z % endif % endfunction返回

函数调用可以出现在上下文变量是允许的。

%,语句调用一个函数时实际上是可用的函数。调用其他函数不包括函数的局部范围,但包括%,在函数内部声明出现。

任务创建新的本地变量和函数内的变量不能改变全局变量的值,除非你使用范围解析操作符(::)。

默认情况下,<一个class="indexterm" name="d123e11358">函数返回一个值,不会产生输出。你可以通过指定覆盖这一行为<一个class="indexterm" name="d123e11362">输出和<一个class="indexterm" name="d123e11370">无效在函数声明行修饰符,如

% foo()函数输出……% endfunction

在这种情况下,函数继续产生输出到当前打开的文件,而不需要返回一个值。您可以使用无效修饰符来表示函数没有返回值,不应产生输出,如

% foo()函数无效……% endfunction

变量作用域内的功能

在一个函数,左边的一个成员%分配语句默认创建一个局部变量。创建一个新条目的函数块内<一个class="indexterm" name="d123e11388">作用域链;它不影响其他条目。一个例子出现在<一个href="//www.tatmou.com/jp/jp/help/rtw/tlc/target-language-compiler-directives.html" class="intrnllnk">功能范围

你可以覆盖由使用这种默认行为%分配范围解析操作符(::)。

当你引入新的作用域内的一个函数,使用%,期间,这些新的作用域使用嵌套的函数调用,但局部作用域的函数不是搜索。

如果一个%,内包含一个函数,其关联的范围是<一个class="indexterm" name="d123e11408">嵌套的函数调用,如第二图所示。

%返回

%返回语句关闭<一个class="indexterm" name="d123e11426">所有%,语句出现在当前函数。在这个例子中,%,声明时自动关闭%返回遇到的声明中,删除搜索范围的范围从列表中:

%函数foo () % s %(名字)% endwith % endfunction返回

%返回声明不需要一个值。您可以使用%返回返回从一个函数没有返回值。

相关的话题