Lua自定义函数whatsthis运行逻辑及字符映射机制疑问
问题解答
1. vtable的类型判定
变量名的后缀只是开发者的命名习惯,不决定变量实际类型。vtable被赋值为字符串字面量,实际是字符串类型,命名带table是因为它承担了字符映射表的作用,只是用字符串结构实现,而非Lua的table类型。
2. 调用逻辑与string1返回值
你的理解是对的,str:byte(i)的作用就是获取字符串第i位字符对应的十进制ASCII值。
- 索引逻辑:Lua中
string.byte(pos)的入参是字符的位置(从1开始计数),这里直接把输入字符的ASCII值b作为位置参数,取vtable对应位置的字节值,再用string.char转回字符,本质是做单表替换加密,把所有1-127范围的ASCII字符按预定义的vtable映射替换。 - 调用
whatsthis(",5MX")的返回值:经过映射替换后最终得到string1 = "icon"。
3. 转义字符的处理规则
- 带转义序列的字符串字面量在Lua语法解析阶段就会完成转义,所有
\开头的转义序列会被转换成对应的单个ASCII字节,最终传入whatsthis的是单个完整的字符串,不会拆分多个值。 - 函数处理时,转义后的字节和普通字符的字节没有区别,会按统一逻辑判断是否走vtable替换。
内容的提问来源于stack exchange,提问作者Bobby
相关产品推荐
相关产品推荐

