为什么newLISP将字符串文字限制为2048个字符?

时间:2013-11-30 10:59:57

标签: string memory newlisp

我正在尝试编写我已经制作的newLISP程序的使用说明,但它一直在抱怨字符串太长。

ERR: string token too long : "$$$$$$$$&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&"

我花了大约十分钟诅咒newLISP并提出偏执理论,比如,你可能不应该在字符串中引用或者当我使用原始字符串时它可能会起作用({}) ,直到我开始砍字符串。它达到了消息消失的程度,使得帮助消息非常无益。结果newLISP不喜欢字符超过2048(2^11)的字符串。洙,

为什么要限制字符串文字中的字符数?
为什么有2048个字符?

将单元格内存增加到128MB(看作手册)不会改变任何内容。现在唯一有效的解决方案(一个hackish),将帮助字符串拆分为两个字符串,每个字符串位于2048个字符下,然后将它们与string连接起来。
另一个奇怪的是,任何具有2048+个字符的字符串在repl:

中的打印方式不同
> (dup "&" 2048)
    [text]&&&&&&&&&&&&&& .....
           ......
                &&&&&&&&&&&&&&&[/text]


> (dup "&" 2040)
    "&&&&&&&&&&&&&&&&&&& .....
        .....
                &&&&&&&&&&&&&&&"

1 个答案:

答案 0 :(得分:1)

有三种方法可以做字符串:

    引号中的
  • - 处理转义字符 - 限制为2048个字符
  • in braces - 不处理转义字符 - 限制为2048个字符
  • 标签中的
  • - 未处理任何转义 - 无限长度

从手册:

  

带引号的字符串不能超过2,048个字符。较长的字符串应使用[text]和[/ text]标记分隔符。 newLISP自动将这些标签用于超过2,048个字符的字符串输出。

字符串可能很长:

> (quiet (set 's (dup "&" 10E8))) ; don't bother to show the string :)
> (length s)
1000000000
> (10000 20 s)
"&&&&&&&&&&&&&&&&&&&&"
>

您唯一的问题是,在希望字符串真正结束之前,您希望在可能包含[/text]标记的字符串中处理源代码。它看起来不像你那时......:)