如何从用户那里获取带有特殊字符的输入,并且不使用“ /”字符将其视为字符串?
例如:
假设有一个过程proc a {input} {...}
获得了以下字符串"classA.arr2[0].classB"
。
如果我没有在“ [0]”旁边添加字符“ /”,它将认为0是命令/过程。
我会更加清楚:
我添加了一个代码,该代码是用于评估args的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"
答案 0 :(得分: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
在这种情况下,使用花括号可防止求值。
我也相信您的意思是\
(反斜杠),而不是/
(斜杠),对吗?