【问题标题】:Line Comments in Standard ML标准 ML 中的行注释
【发布时间】:2011-01-03 01:03:42
【问题描述】:

我正在学习机器学习,使用的是 SML/NJ 方言。我想弄清楚的是是否有行注释运算符。我找到了块注释运算符 (* ... *),但我真的很想念行 cmets。

建议?还是我只是卡在块 cmets 上?

【问题讨论】:

    标签: sml smlnj


    【解决方案1】:

    你被块 cmets 困住了。

    另一方面,block cmets 可以嵌套:(* (* *) still comment here *)

    【讨论】:

    • 这让我很伤心,但是哦。嵌套的 cmets 很酷,谢谢。
    • 作为记录,这取决于您的编译器/交互环境。根据规范,注释可能不包含子字符串“*)”,因此即使某些实现是宽松的,您也应该避免它。
    • @Nicholas Wilson:你说得对,我把事情和 OCaml (caml.inria.fr/pub/docs/manual-ocaml/lex.html) 搞混了。
    • @NicholasWilson,刚刚发现了这个旧答案。作为记录,SML 语言规范明确允许嵌套 cmets(“第 2.3 节:注释是注释括号 (**) 中正确嵌套的注释括号内的任何字符序列”)。所有实现都正确地支持它们,并且总是有。此外,FWIW、MLton 和 SML/NJ 最近都实施了一项旧提案,允许通过 (*) 进行线路 cmets,尽管尚未发布。
    • 好的,我的立场是正确的——但我想我在五年前确实看过它,也许我手里有一个图书馆里的旧规范。
    【解决方案2】:

    There is a RFC for line comments, 提出一个哈希标记,后跟一个空格。

    【讨论】:

    • 我不知道该提案是谁写的,但它与 SML 不兼容:# a 已经是现有代码中使用的有效语法。在一些编译器中已经实现的提议是使用(*) 开始一行注释。
    • 我不知道为什么我因为提到 RFC 而被否决。我只是提供更多信息,而不是告诉你如何投票。
    【解决方案3】:

    只要您启用 sML(“继任者 ML”)扩展(sml -Cparser.succ-ml=true 用于 SML/NJ),单线 cmets 现在在 MLton 和 SML/NJ 中均提供。

    这是一个具体的例子。在下面的定义中,1 的值被忽略,a 的定义取自下一行 (2)。 (下面=表示续行,请忽略断句高亮。)

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

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

    【讨论】:

      猜你喜欢
      • 2015-10-01
      • 1970-01-01
      • 2015-02-06
      • 2014-11-20
      • 2015-04-05
      • 2013-07-27
      • 2012-04-23
      • 2016-01-19
      • 1970-01-01
      相关资源
      最近更新 更多