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个字符
  • 在标记中-不处理转义-长度不限
从手册中:

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

字符串可以很长:

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

您将遇到的唯一问题是,在希望字符串真正结束之前,您需要处理可能包含
[/text]
标记的字符串中的源代码。看起来你还没到那个地步……:)

处理字符串有三种方法:

  • 引号中-处理转义字符-限制为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]
标记的字符串中的源代码。看起来你还没到那个地步……:)

你会怎么做?它似乎允许嵌套
[text]
标记。为什么特别是
2048
characters?@Segfault我想它一定是一个数字,而且2048似乎并不比其他任何数字好或坏……:)你可以试着亲自询问newLISP的作者,如果你想知道确切的原因。你会怎么做?它似乎允许嵌套
[text]
标记。为什么特别是
2048
characters?@Segfault我想它一定是某个数字,而2048似乎并不比其他任何数字好或坏……:)你可以试着亲自询问newLISP的作者,如果你想知道确切的原因。