在我所知道的解释语言(Python、Perl、R、bash)中,多行注释似乎通常涉及对该语言的另一个特性(例如多行字符串)的一些误用。
解释器所做的解析类型是否有一些固有的东西使得多行注释变得困难?它似乎与多行字符串没有显着不同。
在我所知道的解释语言(Python、Perl、R、bash)中,多行注释似乎通常涉及对该语言的另一个特性(例如多行字符串)的一些误用。
解释器所做的解析类型是否有一些固有的东西使得多行注释变得困难?它似乎与多行字符串没有显着不同。
事实上,我确信在实现任何形式的多行注释时(基于大多数解析器用来读取/执行脚本的方法)没有任何意义。在我个人看来,由于分布和解释,脚本最需要多行注释(大多数高级语言通常是编译的,而且只有一部分是开源的)。我知道 Lua,一种脚本语言,确实提供了多行注释:
--[==[
COMMENT
]==]--
我敢肯定,许多语言不支持这一点只是侥幸。通常只使用单行注释来创建多行注释是可以接受的。
//*****************************************\\
//** **\\
//** JOHN SMITH **\\
//** COPYRIGHT 2008-2011 **\\
//** **\\
//*****************************************\\
很多人还会利用单行注释来创建一个很酷的图像(ASCII ART),使用注释字符来开始图像(就像上面显示的那样,//
注释字符/短语在哪里)。
不,脚本语言没有理由不支持多行注释。JavaScript、Groovy、Lua、PHP、REXX、Smalltalk 和 Dart 都支持多行注释。
你的问题有两个错误的假设。
第一个错误假设是“解释/脚本语言很少有多行注释”。你正遭受确认偏见的困扰。有带有单行注释的编译语言(例如 Fortran、许多 Lisp 方言)和带有多行注释的解释语言(例如 Perl、Python)。
第二个错误假设是涉及“滥用另一个功能”。语言作为一个整体设计得更好,如果存在的某些功能可以解决问题,则无需为多行注释引入额外的功能。例如,在 Python 中,存在多行字符串,并且仅由字符串组成的指令是无操作的,因此多行字符串可以做出很好的注释。在 Perl 中,拥有多行注释的一种方法是通过Pod,一种文档格式;注释是一种文档,因此=pod … =cut
用于多行注释是很自然的(多行字符串,通过这里的文档 <<'EOF'; … EOF
,是另一种方法)。
并非所有解释语言都缺少多行注释。例如,Ruby 就有。
我怀疑这在很大程度上是语言设计者的偏好。有些人只是不认为多行注释是必要的功能。(现在许多代码编辑器都提供了使用单行注释注释/取消注释大块代码的快捷方式。)
此外,多行注释增加了解析器的复杂性。例如,它必须处理嵌套注释的可能性。如果不需要,为什么要增加复杂性?
我怀疑这只是一点语言偏见。C 风格的多行注释往往出现在 c 风格的语言中,但大多数其他语言没有等价物。
至于解析器本身。我没有理由认为解析器不实现多行注释,除了语言设计者不想这样做。大多数解析器生成器可以轻松处理该构造。
在 Python 中,我们只是使用多行字符串作为注释。
为什么有两种语法,当一种会做的时候?