2013-07-06 3 views
7

Я добавляю комментарии к моему документу 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, но все равно не повезло.

Есть ли способ обойти это или я застрял с ним?

+3

Приятно видеть [ярлык jachguate] (http://meta.stackexchange.com/a/172057/179541) в действии :-) – TLama

+0

@TLama Я как раз думал почти точно, глядя на запятую в вопрос также исключается из комментария, и в ответе это часть комментария, как и в Delphi: D –

ответ

12

я обнаружил решение, пока я печатал этот вопрос, так что теперь я ответить на него Q/стиль ...

Когда комментарий блок первый начинается в коде на приведенный выше вопрос, он начинает с открывающей скобой {. Таким образом, компилятор отчаянно ищет, чтобы найти закрывающий кронштейн, даже если эта закрывающая скобка находится в другой прокомментированной строке кода. Но если каждая строка в этом блоке комментариев начинается с двух косых черт // вместо открытой скобки {, тогда компилятор не будет искать закрывающий кронштейн }. Так, вместо кода на приведенный выше вопрос, это то, как это должно быть написано:

// 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" 
    } 
*) 

По существу, с того момента, вы начинаете один комментарий, будь то //, { или (*, его будет игнорировать дальнейшее открытие любого другого комментария - он будет искать только конец своего собственного типа комментариев. Итак, // будет искать конец линии, { будет искать }, а (* будет искать *).