我正试图为我制作的这个newLISP
程序编写使用说明,但它一直抱怨字符串太长。
ERR: string token too long : "$$$$$$$$&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&"
我花了大约十分钟的时间诅咒newLISP
,并提出了偏执的理论,比如,也许字符串中不应该有引号,或者当我使用原始字符串({}
)时它会起作用,直到我开始切割字符串。它达到了消息消失的地步,使帮助消息变得毫无帮助。事实证明newLISP
不喜欢超过2048(2^11)
个字符的字符串。Soo,
为什么要限制字符串文字中的字符数
为什么是2048个字符
将单元内存增加到128MB
(在手册中看到过)不会改变任何事情。现在唯一有效的解决方案(一个很粗糙的解决方案)是将帮助字符串拆分为两个字符串,每个字符串都包含2048
字符,然后将它们与string
连接起来
另一件奇怪的事情是,任何具有2048+
字符的字符串在repl:中的打印方式都不同
> (dup "&" 2048)
[text]&&&&&&&&&&&&&& .....
......
&&&&&&&&&&&&&&&[/text]
> (dup "&" 2040)
"&&&&&&&&&&&&&&&&&&& .....
.....
&&&&&&&&&&&&&&&"
有三种方法可以处理字符串:
- 在引号中-处理转义字符-限制为2048个字符
- 大括号中-不处理转义字符-限制为2048个字符
- 在标记中-不处理转义-长度不受限制
来自手册:
带引号的字符串不能超过2048个字符。较长的字符串应使用[text]和[/text]标记分隔符。newLISP会自动将这些标记用于长度超过2048个字符的字符串输出。
字符串可能很长:
> (quiet (set 's (dup "&" 10E8))) ; don't bother to show the string :)
> (length s)
1000000000
> (10000 20 s)
"&&&&&&&&&&&&&&&&&&&&"
>
您唯一会遇到的问题是,在希望字符串真正结束之前,要处理可能包含[/text]
标记的字符串中的源代码。看起来你还没有到那个地步…:)