2013-07-06 8 views
7

Aggiungo commenti al mio codice Delphi per la documentazione. Una delle cose che sto cercando di documentare è la struttura JSON, quindi sto cercando di inserire dati JSON campione commentati nel codice. Tuttavia, JSON utilizza ampiamente le parentesi ondulate { }, che per coincidenza viene utilizzato anche per i commenti in Delphi.Esiste un modo per evitare una parentesi di chiusura per i commenti?

Per questo motivo, non riesco a trovare un modo per aggiungere questi commenti. Di solito per blocchi di commento di documentazione che uso { }, ad esempio:

{ 
    This unit does this and that. 

    Use TSomeComponent to do bla bla 
} 

Quando cerco di documentare i dati JSON, la parentesi di chiusura } conclude il commento - anche se la linea è prefissato con il singolo-riga di commento //, così anche questo non funziona:

{ 
    This is how the JSON structure looks: 

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

appena c'è una parentesi di chiusura }, la linea commentata diventa uncommented, anche se è prefissata dalle due barre. Quindi Delphi prende la virgola dopo questa parentesi. Quindi, alla fine, non riesco a capire in alcun modo in cui posso documentare i campioni JSON all'interno del mio codice.

Ho anche provato a utilizzare (* *) intorno al blocco JSON ma ancora senza fortuna.

C'è un modo per aggirare questo o sono bloccato con esso?

+3

Bello vedere ['jachguate's highlighter'] (http://meta.stackexchange.com/a/172057/179541) in azione :-) – TLama

+0

@TLama Stavo pensando quasi esattamente a quello, guardando la virgola in anche la domanda è esclusa dal commento, e nella risposta è parte del commento, proprio come in Delphi: D –

risposta

12

Ho scoperto la soluzione, mentre stavo scrivendo questa domanda, così ora sto rispondendo it Q/Uno stile ...

Quando il blocco di commento prima inizia come nel codice nella domanda di cui sopra, si riparte con una staffa di apertura {. Quindi, il compilatore sta cercando disperatamente di trovare una parentesi di chiusura, anche se quella parentesi di chiusura si trova in un'altra riga di codice commentata. Tuttavia, se ogni riga in questo blocco di commenti inizia con due barre // anziché una parentesi di apertura {, il compilatore non cercherà la parentesi di chiusura }. Così, al posto del codice nella domanda di cui sopra, questo è come dovrebbe essere scritto:

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

Quindi, fintanto che non si inizia il blocco di commento con una parentesi di apertura, quindi il compilatore non provare per terminare il blocco dei commenti quando trova una parentesi di chiusura.

Inoltre, l'utilizzo di (* *) dovrebbe funzionare correttamente, a condizione che non venga utilizzato dopo aver già utilizzato {. Racchiudere l'intero blocco con (* e *) e il compilatore ignorerà qualsiasi { o } dentro, in questo modo:

(* 
    This is how the JSON structure looks: 

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

In sostanza, dal momento in cui si inizia un commento, sia che si tratti //, { o (*, esso ignorerà ogni ulteriore apertura di qualsiasi altro tipo di commento: cercherà solo la fine del proprio tipo di commento. Quindi // cercherà la fine della riga, { cercherà } e (* cercherà *).

Problemi correlati