Tcl lreplace non può sostituire le parentesi graffe?
-
29-10-2019 - |
Domanda
Che cosa dovrebbe fare questo esempio di codice?
set l { A B C D }
lreplace $l 1 2 \[ \]
Restituisce {A {[} \] D}
, tuttavia desidero avere {A [ ] D}
.
Cosa sto facendo di sbagliato?
Soluzione
Il tuo codice fa esattamente quello che vuoi, stai solo leggendo la rappresentazione della stringa del tuo output e fraintendendola:
% set l { A B C D }
A B C D
% foreach elem $l { puts $elem }
A
B
C
D
% set j [lreplace $l 1 2 \[ \]]
A {[} \] D
% foreach elem $j { puts $elem }
A
[
]
D
% join $j
A [ ] D
Quando leggi la ripetizione della stringa, vedi che sfugge a [e].Come puoi vedere dall'output di foreach, i valori effettivi sono ciò che stai chiedendo.Puoi utilizzare join
per ottenere la stringa che ti interessa se quello che vuoi è solo una stringa con i caratteri in questione.
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow