|
地板
楼主 |
发表于 2019-12-9 22:32:23
|
只看该作者
定义可以在嵌入行中使用的宏,目前不支持在方法中定义. 语法格式为:
1. 不携带参数表方式:
@def_macro 宏名称 宏内容
在使用该宏时将直接使用宏内容对该宏进行替换.
如: @def_macro TEST wutao
使用该宏时,如 @m<TEST>,该宏替换后的实际内容将为 wutao .
2. 携带参数表方式:
@def_macro 宏名称(宏参数名称, ...) 宏内容
注意事项:
A. 参数表的左括号必须紧跟在宏名称后面,中间不能存在空白字符,不然就会被认为是宏内容的一部分;
如: @def_macro TEST(param1) param1
该宏的名称为TEST,具有一个名为param1的宏参数,宏内容是直接使用该参数.
如果左括号与TEST之间存在空白字符的话,如: @def_macro TEST (param1) param1
那么该宏就是一个名为TEST,没有参数,宏内容为"(param1) param1".
B. 参数表中可以包括一个或多个宏参数名称,多个参数名称之间使用逗号进行分隔;
如: @def_macro MY_ADD(param1, param2) param1 + param2
C. 宏内容中可以使用参数表内定义的宏参数名称,在使用该宏时将使用对应的实际参数内容进行替换;
D. 在宏内容中所使用的宏参数名称,如果其前方为1个'#'字符,该"#宏参数名"在进行宏替换时将被替换为字符串格式,即自动在两侧加上双引号;
如: @def_macro TEST(param1) #param1
使用该宏时,如 @m<TEST> (abc) ,该宏替换后的实际内容将为 "abc" ,注意abc两侧双引号也是替换后内容的一部分.
E. 在宏内容中所使用的宏参数名称,如果其前方为2个'#'字符,该"##宏参数名"在进行宏替换时将自动与其前方内容连接起来.
如: @def_macro TEST(param1) wutao_##param1
使用该宏时,如 @m<TEST> (abc) ,该宏替换后的实际内容将为 wutao_abc ,前后文本将连接在一起.
F. 如果使用宏时所提供的实际参数数目超出当前所定义宏参数数目,则所有多余参数内容将被统一视为最后一个宏参数的替换内容.
如: @def_macro TEST(param1) param1
使用该宏时如果提供了多余的参数,如 @m<TEST> (abc, bcd) ,则最终得到的替换结果就是 abc, bcd ,而不会报错.
此特性是为了支持将目标语言的复杂代码文本指定为宏的最后一个参数的内容,如:
@m<TEST> (myObject.myMethod (1, 2, 3)) ,最终得到的替换结果就是 myObject.myMethod (1, 2, 3) .
3. 多行宏内容:
如果宏内容包括多行,可以在当前行的尾部使用'\'字符标记其紧接着的下一嵌入行也属于本宏的内容.如果当前行的尾部为双引号,而且下一行的首部也为双引号,则这两个字符串将合并到一起.
如:
@def_macro TEST wutao \
volcano \
dev
使用该宏时所最后得到的替换结果为:
wutao
volcano
dev
再如:
@def_macro TEST "wutao " \
"volcano"
使用该宏时所最后得到的替换结果为:
"wutao volcano"
4. 宏内容中可以使用本表中列出的除开宏定义本身以外的所有其它替换符,包括使用其它宏.
@m<宏名称> (参数表) 使用所指定名称的宏,可以在后方跟随一个参数表(注意此处不再限制左括号与其前方不能留空白字符),参数表中的所有参数用作替换对应的宏参数.
注意:
1. 如果所欲使用的宏在类中定义,并且当前使用位置不位于该类中,则必须在宏名称前加上类名前缀;
2. 如果所使用宏未指定类名前缀,且其当前使用位置所处类及程序全局中均定义有该名称的宏,则将使用类中定义的宏;
3. 可以跨越多行提供宏参数表. 如:
@m<TEST> ("wutao",
"volcano")
使用格式:
1. 不携带参数表方式:
如: @m<TEST>
2. 携带参数表方式:
如: @m<TEST> ("wutao", "volcano")
注意如前所述,如果所提供的实际参数数目大于所使用宏中定义的宏参数数目,则所有多余部分将被视为宏的最后一个参数的内容.
--------------------------------------
我都看了,就是找不到? |
|