为什么Lua中的print()会表现如此?

关于Lua解释器

>print("这是一个字符串
>>分布在多行")
stdin:1: '"This is a'附近有未完成的字符串

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

>a=2
>a=a+
>>1

这个工作得很好

再次:

>print([[这是一个多行
>>字符串]])
这是一个多行
字符串

这个很好工作!那么为什么第一个print() 语句显示错误?

点赞
用户805875
用户805875

阅读详细的参考手册:

3.1 - 词法约定

[...]

一个短字面字符串可以用匹配单引号或双引号括起来,并且可以包含以下类似于C的转义序列: ' \a'(响铃), ' \b'(退格),' \f'(换页符),' \n'(换行符),' \r'(回车符),' \\t'(水平制表符),' \v' (垂直制表符),' \\'(反斜线),' \"'(引号[双引号]),' \''(撇号[单引号])。反斜线后跟随换行符将在 字符串中产生一个换行符。 转义序列 '\z' 跳过以下空白字符区域,包括换行符;这对于将长字面字符串分断并缩 进成多行而无需将换行符和空格添加到字符串内容中非常有用。短字面字符串不能包含未转义的换行符,也不能包括无 效的转义序列。

[...]

字面字符串也可以使用_长格式_用_长方括号_括起来来定义。我们将级别为n的开头长方括号定义为一个开方括号,后 面跟随着n个等号,再后面跟着另一个开方括号。因此,级别为0的开头长方括号写为[[,级别为1的开头长方括号写 为[=[,以此类推。_关闭长方括号_也是类似定义的;例如,级别为4的关闭长方括号写为]====]。_长字面_以任意级别的 开头长方括号开始,并在相同级别的第一个关闭长方括号结束。它可以包含任何文本,除了相同级别的关闭括号。这种 方括号形式的字面上也可以跨越多行,不会解释任何转义序列,并忽略任何其他级别的长方括号。任何种类型的行结尾序列 (回车符,换行符,回车符后跟随换行符或换行符后跟随回车符)都会转换为简单的换行符。

2017-05-30 06:25:27