标准 ML 中的行注释

26

我正在学习使用SML/NJ方言的机器学习。我想知道是否有单行注释运算符,因为我找到了块注释运算符 (* ... *),但我非常需要单行注释。

有什么建议吗?还是说我只能使用块注释?

3个回答

34

你被困在块注释中。

另一方面,块注释可以嵌套:(* (* *) 这里仍然是注释 *)


这让我感到难过,但没关系。嵌套的评论很酷,谢谢。 - icco
2
记录一下,这取决于您的编译器/交互式环境。根据规范,注释中不能包含子字符串“*)”,因此即使某些实现宽容,您也应该避免使用它。 - Nicholas Wilson
3
@Nicholas Wilson:你是正确的,我把OCaml(http://caml.inria.fr/pub/docs/manual-ocaml/lex.html)的东西搞混了。 - Victor Nicollet
4
@NicholasWilson,刚刚发现这个旧的回答。记录一下,SML语言规范明确允许嵌套注释(“第2.3节:注释是以正确嵌套的注释括号(* *)包含的任何字符序列”)。所有实现都正确支持它们,并始终如一地支持。另外,值得一提的是,MLton和SML/NJ最近已经实现了一个允许使用(*)作为行注释的旧提案,尽管它还没有发布。 - Andreas Rossberg
好的,我改正一下 - 但是我觉得我五年前确实查过,也许当时我手头上有一个较老的库规范。 - Nicholas Wilson

4
有一份针对行注释的RFC,建议使用#号后跟一个空格。 (链接)

5
我不知道谁提出了那个建议,但它与SML不兼容:#a已经是现有代码中使用的合法语法。在一些编译器中实现的建议是使用(*)来开始行注释。 - Andreas Rossberg
3
我不知道为什么提到RFC就会被踩。我只是提供更多信息,而不是告诉你该怎么投票。 - Adam Howell

1

现在MLton和SML / NJ都支持单行注释,只要您启用sML(“Successor ML”)扩展(对于SML / NJ,请使用sml -Cparser.succ-ml=true)。

下面是一个具体的例子。 在以下定义中,值1被忽略,并且a的定义从下一行(2)开始。 (下面的=表示续行,请忽略损坏的语法突出显示。)

$ sml -Cparser.succ-ml=true
- val a = (*) 1
=   2;;
val a = 2 : int

请参阅https://github.com/SMLFamily/Successor-ML/wiki/Summary-of-proposed-changes了解更多关于sML的信息。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接