【问题标题】:Is there a way to escape a closing bracket for comments?有没有办法逃避评论的右括号?
【发布时间】:2013-07-07 09:27:59
【问题描述】:

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

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

{
  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 块周围使用 (* *),但仍然没有成功。

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

【问题讨论】:

  • 很高兴看到jachguate's highlighter 在行动:-)
  • @TLama 我只是想几乎完全一样,查看问题中的逗号也排除在评论之外,并且在答案中它是评论的一部分,就像在 Delphi 中一样:D

标签: delphi escaping comments


【解决方案1】:

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

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

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

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

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

(*
  This is how the JSON structure looks:

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

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

【讨论】:

    猜你喜欢
    • 2021-12-05
    • 1970-01-01
    • 2015-12-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-10
    • 2015-10-28
    • 1970-01-01
    相关资源
    最近更新 更多