为什么在 Lua 中的 print() 表现得像这样?

Gou*_*Das 0 lua

关于 Lua 解释器

>print("This is a string
>>spread over multiline")
stdin:1: unfinished string near '"This is a'
Run Code Online (Sandbox Code Playgroud)

因为我们知道在 Lua 解释器上我们可以通过多行完成一个语句例如

>a=2
>a=a+
>>1
Run Code Online (Sandbox Code Playgroud)

这完美地工作

再次:

>print([[This is a multiline
>>string]])
This is a multiline
string
Run Code Online (Sandbox Code Playgroud)

这工作正常!!那么为什么在第一个 print() 语句中显示错误呢??

nob*_*ody 5

阅读精美的参考手册:

3.1 – 词汇约定

[…]

短文本字符串可以通过匹配单引号或双引号进行分隔,并且可以包含下面的C状的转义序列:“ \a”(钟形),“ \b”(退格),“ \f”(形式进料),“ \n”(换行), ' \r'(回车)、' \t'(水平制表符)、' \v'(垂直制表符)、' \\'(反斜杠)、' \"'(引号[双引号])和' \''(撇号[单引号])。反斜杠后跟换行符会导致字符串中出现换行符。转义序列 '\z' 跳过以下空白字符范围,包括换行符;将长文本字符串拆分和缩进为多行而不在字符串内容中添加换行符和空格特别有用。短文字字符串不能包含未转义的换行符,不能包含未形成有效转义序列的转义符

[…]

也可以使用长括号括起来的长格式来定义文字字符串。我们将第 n 级左长括号定义为一个左方括号,后跟n 个等号,然后是另一个左方括号。因此,级别 0[[的左长括号写为[=[,级别 1 的左长括号写为,依此类推。甲 长括号被类似地定义; 例如,第 4 级的右长括号写为]====]。甲长字面开始在同一电平的第一长括号任何水平和端部的开口长支架。它可以包含除同级右括号外的任何文本。这种括号形式的文字可以运行多行,不解释任何转义序列,并忽略任何其他级别的长括号。任何类型的行尾序列(回车、换行、回车后换行或换行后回车)都将转换为简单的换行符。