2016-07-19 10 views
0

文字列内で " - "が検出されたときにsthを実行するコードを書いています。とき、私は実行します。Tclで " - "を無視する

regsub -all "-" $code "m" code 
: - : - "" 別の文字と私は交換してみました

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

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

しかし、Tclは、それはだとしてこれを解釈する "" switchオプションのプレフィックスとして

でも同じです:

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

それも、私が\u2dを使用したときの動作:

知られている問題であり、特別なオプション --が導入されたことを解決するために
regsub -all \u2d $code "m" code 
switch $code \u2d {puts "hi" ;} 
+0

ヒントを使用している場合

だからあなたのコードが動作する...データとして次のトークンを扱い、他のスイッチは存在しません--後を意味し、スイッチの終わりを意味します。代わりに、 'set mem($ ptr)[expr $ mem($ ptr)-1]'の 'incr mem($ ptr)-1'を使ってください。もしそうでなければ、少なくともexpr {$ mem($ ptr)-1} 'の式を補ってください。 –

答えて

3

。それはあなただけの一日の

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

もう一つの修正点は、8.6にアップグレードすることです。ここで 'switch 'に2つの引数がある場合、どちらもオプションとして扱われます(なぜなら、最初はやっかいなことです)。 –

関連する問題