String 为什么newLISP将字符串文本限制为2048个字符?
我试图为我制作的String 为什么newLISP将字符串文本限制为2048个字符?,string,memory,newlisp,String,Memory,Newlisp,我试图为我制作的newLISP程序编写使用说明,但它一直抱怨字符串太长 ERR: string token too long : "$$$$$$$$&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&" 我花了大约十分钟的时间咒骂
newLISP
程序编写使用说明,但它一直抱怨字符串太长
ERR: string token too long : "$$$$$$$$&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&"
我花了大约十分钟的时间咒骂newLISP
,然后想出了一些偏执的理论,比如,也许你不应该在字符串中加引号,或者当我使用原始字符串({}
)时它会起作用,直到我开始切碎字符串。它达到了这样一个地步:消息消失了,而帮助消息却毫无用处。原来newLISP
不喜欢包含超过2048(2^11)
个字符的字符串。苏,
为什么要限制字符串文本中的字符数?为什么是2048个字符? 将单元内存增加到128MB(参见手册)不会改变任何事情。现在唯一有效的解决方案(一种黑客的解决方案)是将帮助字符串拆分为两个字符串,每个字符串位于
2048
字符下,然后将它们与string
连接起来另一件奇怪的事情是,任何包含
2048+
字符的字符串在repl中的打印方式都不同:
> (dup "&" 2048)
[text]&&&&&&&&&&&&&& .....
......
&&&&&&&&&&&&&&&[/text]
> (dup "&" 2040)
"&&&&&&&&&&&&&&&&&&& .....
.....
&&&&&&&&&&&&&&&"
有三种方法可以处理字符串:
- 引号中-处理转义字符-限制为2048个字符
- 大括号中-不处理转义字符-限制为2048个字符
- 在标记中-不处理转义-长度不限
> (quiet (set 's (dup "&" 10E8))) ; don't bother to show the string :)
> (length s)
1000000000
> (10000 20 s)
"&&&&&&&&&&&&&&&&&&&&"
>
您将遇到的唯一问题是,在希望字符串真正结束之前,您需要处理可能包含
[/text]
标记的字符串中的源代码。看起来你还没到那个地步……:) 处理字符串有三种方法:
- 引号中-处理转义字符-限制为2048个字符
- 大括号中-不处理转义字符-限制为2048个字符
- 在标记中-不处理转义-长度不限
> (quiet (set 's (dup "&" 10E8))) ; don't bother to show the string :)
> (length s)
1000000000
> (10000 20 s)
"&&&&&&&&&&&&&&&&&&&&"
>
您将遇到的唯一问题是,在希望字符串真正结束之前,您需要处理可能包含
[/text]
标记的字符串中的源代码。看起来你还没到那个地步……:) 你会怎么做?它似乎允许嵌套[text]
标记。为什么特别是2048
characters?@Segfault我想它一定是一个数字,而且2048似乎并不比其他任何数字好或坏……:)你可以试着亲自询问newLISP的作者,如果你想知道确切的原因。你会怎么做?它似乎允许嵌套[text]
标记。为什么特别是2048
characters?@Segfault我想它一定是某个数字,而2048似乎并不比其他任何数字好或坏……:)你可以试着亲自询问newLISP的作者,如果你想知道确切的原因。