仓颉宏的定义需要放在由 macro package 声明的包中,被 macro package 限定的包仅允许宏定义对外可见,其他声明包内可见。
说明
重导出的声明也允许对外可见,关于包管理和重导出的相关概念。
// file define.cj
macro package define // 编译 define.cjo 携带 macro 属性
import std.ast.*
public func A() {} // Error, 宏包不允许定义外部可见的非宏定义,此处需报错
public macro M(input: Tokens): Tokens { // macro M 外部可见
return input
}
需要特殊说明的是,在 macro package 中允许其它 macro package 和非 macro package 符号被重导出,在非 macro package 中仅允许非 macro package 符号被重导出。
参考如下示例: