DUI1xxx · 词法
一串字符构不成任何记号。
本页由 scripts/diagnostics/sync.py 从插件的码表(EDreamUIDiagnosticCode)生成,卡片里的枚举名就是测试断言用的那个名字。
DUI1001
错误枚举名UnexpectedCharacter
一个不能作为任何记号开头的字符。
怎么会出现:词法器读到一个语法里没有任何记号以它开头的字符:单引号、$、?、[、]、反引号,或者落单的 &、|(只有 &&、|| 是运算符)。连成一串的这种字符只报一次,所以把 Source File 误指向一个根本不是 .dui 的文件时,你看到的是一条消息,而不是淹没其他问题的成千上万条。
Text Title {
Text = 'Settings'
}怎么改:字符串用双引号;如果整个文件都是乱码,检查 Blueprint 的 Source File 指向了哪里。
DUI1002
错误枚举名UnterminatedString
一个在行尾之前没有遇到右引号的字符串。
怎么会出现:字符串不能跨行,从左引号到行尾都没有一个未转义的 " 就报这个码。常见原因是漏了右引号,或者字符串里的引号没有写成 \"。
Text Title {
Text = "Settings
}怎么改:补上右引号;字符串里的引号写 \",换行写 \n。
DUI1003
错误枚举名UnterminatedComment
一个直到文件末尾都没有遇到 */ 的 /*。
怎么会出现:块注释从 /* 开始,到第一个 */ 结束;文件读完了还没遇到,后面的整个文件都被当成了注释。
/* 设置页
Widget Root {
Text Title { Text = "Settings" }
}怎么改:在注释该结束的地方补上 */;只注释一行时用 // 更不容易出这种错。
DUI1004
错误枚举名MalformedNumber
一个读不成数字的数字:两个小数点、末尾的点,或者粘了一个单位(24px)。
怎么会出现:以数字开头,却带着数字里不该有的部分:1.2.3、3.、指数后没有数字的 1e、后面什么都没跟的 -,或者紧贴着的字母,比如习惯了 CSS 写出来的 24px。这些都被吞进同一个记号再报,免得剩下的 px 被当成一个节点头,再凭空多出一条不相干的错误。
Text Title {
FontSize = 24px
}怎么改:写纯数字,比如 -12、0.95、1e-45;单位不写,数值按属性自身的单位读。
DUI1005
错误枚举名MalformedHexColor
一个十六进制位数不是 3、4、6 或 8 的 # 颜色。
怎么会出现:颜色写成 #RGB、#RGBA、#RRGGBB 或 #RRGGBBAA,按 sRGB 读;其他位数(比如少敲了一位的 #FF660),或者 # 后面混进了不是十六进制数字的字符,都报这个码。
Text Note {
Color = #FF660
}怎么改:补齐位数,比如 #FF6600;要带透明度就写 8 位,比如 #FF6600CC。
DUI1006
错误枚举名IdentifierTooLong
一个比 FName 能容纳的更长的名字。
怎么会出现:这门语言写下的每个名字(节点 id、属性名、处理函数名、循环变量)最终都会变成某处的一个 FName,而 FName 遇到超长的字符串(超过 NAME_SIZE 允许的 1023 个字符)不会返回错误,而是直接断言,把编辑器一起带走。所以词法器在记号这一层就拦下它,一条规则覆盖名字能出现的每个位置。没写 id 的节点,如果解析器为它拼出的 id 超长,也报这个码。
怎么改:把名字改短;如果超长的是生成的 id,给这个节点或它上面的某个节点写一个 id。
DUI1007
错误枚举名AssetPathTooLong
一个比 FName 能容纳的更长的资产路径。
怎么会出现:加载资产时,路径会被拆成包名、对象名这些 FName,其中一个超长时引擎同样会停掉编辑器而不是报错(见 DUI1006)。裸写的路径在词法阶段拦下,写成字符串的路径在构建控件树时拦下。
怎么改:检查路径是不是拼接出错或者被粘贴了两遍;真实的资产路径不会这么长。