“function or expression needs too many registers” 阻碍了把数据序列化成代码,怎样绕过比较好? return {1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,{1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,{1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,{1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,{1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,{1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0}}}}}} 『More Lines』
序列化大数组不要这么做,非常低效。因为运行的时候构造大表就是很低效的。而且生成的 bytecode 也很浪费空间。
比较简单的方法是把数据块直接打包成字符串常量,然后生成 string.unpack 解码。
不是要序列化数字组成的数组,而是序列化一个非特定结构的table,所以不能靠string.unpack解决。上边的数据是个链表,把数字1替换成字符串或表也一样 『More』 - 回复 | (2999) | 熊起 | 2018-01-25 08:14:18
限制/bug 的问题你可以自己去 lua mailing list 里去提,我不是 lua 的维护者。
你可以用 local tmp = {} ; tmp[1] = 1, tmp[2] = 1 , ... 这样来生成。对于连续的数字,可以打包成字符串,再用 string.unpack 。简单说,想个办法做紧凑的序列化,然后把序列化结果以字符串保存,调用反序列化解开,这样要高效的多。 - 回复 | (3000) | 云风 | 2018-01-28 07:57:04