8

我正在为我的 Delphi 代码添加注释以获取文档。我试图记录的一件事是 JSON 结构,因此我试图将示例 JSON 数据放在代码中注释。然而,JSON 广泛使用波浪括号{ },巧合的是,它也用于 Delphi 中的注释。

因此,我想不出添加这些评论的方法。通常对于我使用的文档注释块{ },例如:

{
  This unit does this and that.

  Use TSomeComponent to do bla bla
}

当我尝试记录 JSON 数据时,右括号}会结束注释 - 即使该行以单行注释为前缀//,所以即使这样也不起作用:

{
  This is how the JSON structure looks:

//    {
//      "some_string": "value",
//      "some_object": {
//        "something": 123
//      }, //<-- Compiler detects this comma
//      "something_else": "some other string"
//    }
}

只要有一个右括号},注释的行就会变成未注释的,即使它的前缀是两个斜杠。所以 Delphi 选择了这个括号后面的逗号。所以最后,我想不出任何方法可以在我的代码中记录 JSON 样本。

我什至尝试(* *)在 JSON 块周围使用,但仍然没有运气。

有什么办法可以解决这个问题还是我坚持下去?

4

1 回答 1

15

我在输入这个问题时发现了解决方案,所以现在我以 Q/A 风格回答它......

当注释块第一次以上述问题中的代码开头时,它以左括号开头{。因此,编译器拼命寻找一个右括号,即使该右括号在另一行注释的代码中。但是,如果此注释块中的每一行都以两个斜杠//而不是左括号开头{,那么编译器将不会寻找右括号}。所以,不是上面问题中的代码,而是应该这样写:

//  This is how the JSON structure looks:
//  
//    {
//      "some_string": "value",
//      "some_object": {
//        "something": 123
//      },
//      "something_else": "some other string"
//    }

因此,只要您不以左括号开始注释块,那么编译器在找到右括号时就不会尝试结束注释块。

此外, using(* *)应该可以正常工作,只要您在使用后不使用它{(*用and将整个块括起来*),编译器将忽略其中的任何{or },如下所示:

(*
  This is how the JSON structure looks:

    {
      "some_string": "value",
      "some_object": {
        "something": 123
      },
      "something_else": "some other string"
    }
*)

本质上,从您开始一条评论的那一刻起,无论是//{还是(*,它都会忽略任何其他类型的评论的进一步打开 - 它只会寻找自己的评论类型的结尾。所以//会寻找行尾,{会寻找},然后(*会寻找*)

于 2013-07-06T23:17:01.110 回答