2016-07-19 10 views
0

Ich schreibe einen Code, um etw zu tun, wenn er "-" in einer Zeichenfolge erkennt. wenn ich das tue:Ignorieren von "-" in Tcl

switch [string index $code $j] { 
    "-" { set mem($ptr) [expr $mem($ptr) - 1] ; } 

Aber Tcl interpretiert dies als es ist "-" als switch Option prefix:

bad option "-": must be -exact, -glob, -regexp, -command procname or -- 

Ich habe versucht, zu ersetzen "-" mit einem anderen Charakter:

regsub -all "-" $code "m" code 

Aber es ist dasselbe:

bad switch "-": must be -all, -nocase, -expanded, -line, -linestop, -lineanchor, -start, or -- 

Es kommt sogar vor, wenn ich \u2d verwenden:

regsub -all \u2d $code "m" code 
switch $code \u2d {puts "hi" ;} 
+0

Tipp des Tages verwenden: statt von 'set mem ($ ptr) [ausdr $ mem ($ ptr) - 1]', benutze 'incr mem ($ ptr) -1'. Wenn Sie das nicht tun, schränken Sie zumindest den Ausdruck ein: 'expr {$ mem ($ ptr) - 1}'. –

Antwort

3

Das ist ein bekanntes Problem ist, und zu lösen, dass die besondere Option -- eingeführt wurde. Es bedeutet Ende der Schalter, das heißt nach -- es keine anderen Schalter sein, das nächste Token als Daten behandeln ...

So wird Ihr Code funktioniert, wenn Sie nur

switch -- [string index $code $j] { 
    "-" {set mem($ptr) [expr $mem($ptr) - 1]} 
} 
+1

Die andere Lösung besteht darin, auf 8.6 zu aktualisieren, wo, wenn es nur zwei Argumente zum "Wechseln" gibt, es _never_ entweder als Option behandelt (weil das zu Beginn immer sehr ärgerlich war). –