| 运算符 | 说明 |
|---|---|
$ |
包含操作符 |
包含操作符 $ 是一个编译时操作符,可以将外部文件在编译期嵌入到代码中以创建一个字符串对象。
$ 后面必须用一个双引号或反引号包含的原样字符串指定要包含的文件路径。aardio 在编译时会将指定的文件编译为字符串( 可包含二进制数据 )。在程序编译发布后,即可脱离源文件运行, 因为该文件已经被编译并内嵌到程序中了。
示例:
import console;
console.log ( $"/my.txt" ) //my.txt 文件内容
如果 $ 包含的文件路径以~/或~\开始,并且查找文件失败, aardio 会移除路径前面的~,转换为单个\或/开头的应用程序基准目录路径继续查找。
应用程序基准目录在开发时指工程根目录(工程之外独立运行的 aardio 文件则指启动 aardio 文件所在目录),在发布后则指启动 EXE 所在目录。
反之,如果包含的文件以单个\或/开始,并且查找包含文件失败,aardio 不会在路径前面添加~到EXE目录下查找(EXE目录在开发时指 aardio 开发环境所在目录)。
默认如果找不到包含文件会报错,但是如果被包含的文件路径前面添加一个问号, 找不到文件时则不会报错而是返回 null,示例:
import console;
console.log ( $"?不存在的路径" ) //不报错而是返回 null
注意:
被包含的文件程序发布后已内嵌到生成的 EXE 文件中,因此没有必要再将被包含的文件放入内嵌资源目录( 这样会导致同一个文件被包含两次 )。
$"/res/example.txt" 重复包含了 /res/example.aardio 文件两次。string.load("/res/example.txt") 或 $"/非工程内嵌资源目录/example.txt"如果使用 string.loadcode 等函数将普通字符串间接生成 aardio ,则发布时不会编译该字符串。例如编译 aardio 代码 string.loadcode("$'/example.txt'") 时并不会编译 "$'/example.txt'" , 因为在编译阶段 "$'/example.txt'" 只是一个普通字符串而非 aardio 代码。
包含操作符嵌入的是原始二进制文件,不会对被包含的文件数据进行任何改变。
即使你包含的是 aardio 源码文件,aardio 不会编译该文件。所以一般不应该将 $ 操作符用于包含 aardio 源码文件。相反,如果通过内嵌资源目录包含 aardio 源码文件,发布 EXE 时则会自动自动编译该文件。
loadcode($"/include/example.aardio") 发布时不会编译 example.aardio ,生成的 EXE 原样包含 example.aardio 的源代码。loadcode("/res/example.aardio") 发布自动编译 example.aardio ,生成的 EXE 不会包含 example.aardio 的源代码。