0

如何在不使用“/”字符的情况下从用户那里获取带有特殊字符的输入并将其视为字符串?
例如:
假设有一个proc a {input} {...}获取以下字符串的过程"classA.arr2[0].classB"
如果我没有在“[0]”旁边添加字符“/”,它会认为 0 是一个命令/过程。

我会更清楚地说明:
我添加了一个代码,它是Class A评估参数的方法的一部分。

public method config {args} {
    if {[llength $args] > 1} {
        foreach {option value} $args {
            if {[string length $option] == 0 || [string length $value] == 0} {
                puts "Runtime error::Bad Input: option flag or value is missing"
                return ""
            }
            switch -- $option {
                -scope { 
                    if { [regexp {[A-Za-z]+} $value] } {
                        set _scope $value 
                    } else { 
                        puts "Runtime error::Bad Input: BAD SCOPE FORMAT" 
                        return ""
                    }
                } ...

现在我想运行以下代码:

A a
a config -scope "string1.string2[0].string3"
4

1 回答 1

1

我假设,您想从tclsh. 如果是这样,只需将输入放在大括号内。例子:

% proc a {input} {puts "Doing stuff with $input"}
% a "classA.arr2[0].classB" ;# Zero is evaluated
invalid command name "0"
% a "classA.arr2\[0\].classB" ;# You have to escape square brackets
Doing stuff with classA.arr2[0].classB
% a {classA.arr2[0].classB} ;# Or you can take the input in braces instead
Doing stuff with classA.arr2[0].classB

在这种情况下,使用大括号会阻止评估。

我也相信您的意思是\(反斜杠),而不是/(斜杠),对吗?

于 2018-08-09T13:31:11.370 回答