2

Tcl スイッチ コマンドを使用する場合は、特別なレベルの評価が必要です。私が何を意味するかを示すために、repl でのセッションの例を次に示します。

$ tclsh
% regexp {^\s*foo} " foo"
1
% regexp {^\\s*foo} " foo"
0
% switch -regexp " foo" {^\\s*foo {puts "match"}}
match
% switch -regexp " foo" {{^\s*foo} {puts "match"}}
match

...最初の「スイッチ」バージョン内に余分なバックスラッシュを追加する必要がありました。これは、Windows の 8.5.0 と 8.6.0 の間で一貫しています。誰かが、これと同様の余分なレベルの引用解除の例が説明されているマニュアルのセクションを教えてもらえますか? 私が最初に考えたのは、最初の「switch」バー​​ジョンの中括弧はバックスラッシュを保護していたはずですが、「switch」自体が追加レベルのバックスラッシュ置換をパターンに適用しているに違いないということでした。他の何かのニュアンスを誤解していない限り。

編集: ... うーん... Johannes Kuhn が以下で言っているように、バックスラッシュの置換は明らかに使用の動的なコンテキストに依存し、作成の語彙的なコンテキストには依存しません...

% set t {\s*foo}
\s*foo
% proc test_s x {set x}
% test_s $t
\s*foo
% proc test_l x {lindex $x 0}
% test_l $t
s*foo
% puts $t
^\s*foo

...それは非常に興味深いデザインの選択のようです。

4

1 に答える 1