1

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

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

我花了十分钟诅咒newLISP并提出偏执的理论,比如,也许你不应该在字符串中使用引号,或者当我使用原始字符串({})时它会起作用,直到我开始切断字符串。它达到了消息消失的地步,使帮助消息非常无用。结果newLISP不喜欢超过2048(2^11)字符的字符串。苏,

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

将单元内存增加到128MB(参见手册)不会改变任何事情。现在唯一可行的解​​决方案(一个骇人听闻的解决方案)是将帮助字符串分成两个字符串,每个字符串都位于2048字符下,然后将它们与string.
另一件奇怪的事情是,任何包含2048+字符的字符串在 repl 中的打印方式都不同:

> (dup "&" 2048)
    [text]&&&&&&&&&&&&&& .....
           ......
                &&&&&&&&&&&&&&&[/text]


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

1 回答 1

1

字符串的三种方式:

  • 带引号 - 处理转义字符 - 限制为 2048 个字符
  • 在大括号中 - 不处理转义字符 - 限制为 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]您将遇到的唯一问题是,当您希望在字符串真正结束之前处理可能包含标记的字符串中的源代码时。看起来你还没有到那个时候...... :)

于 2013-11-30T17:09:38.677 回答