“操作员”;或;TCL

“操作员”;或;TCL,tcl,operators,Tcl,Operators,这不是一个与TCL相关的问题,正如我所知……我将它写在这个标签中写入时,可以知道哪个变量不正确: set l1 0 set l2 2 if {$l1 == 0 || $l2 == 1} { return {your variable $l1 or $l2 is not correct} } if {$l1 == 0} { return {your variable $l1 is not correct} } if {$l2 == 1} { return {your

这不是一个与TCL相关的问题,正如我所知……我将它写在这个标签中
写入时,可以知道哪个变量不正确:

set l1 0
set l2 2

if {$l1 == 0 || $l2 == 1} {
    return {your variable $l1 or $l2 is not correct}
}
if {$l1 == 0} {
    return {your variable $l1 is not correct}
}

if {$l2 == 1} {
    return {your variable $l2 is not correct}
}
为了避免这种情况,我写:

set l1 0
set l2 2

if {$l1 == 0 || $l2 == 1} {
    return {your variable $l1 or $l2 is not correct}
}
if {$l1 == 0} {
    return {your variable $l1 is not correct}
}

if {$l2 == 1} {
    return {your variable $l2 is not correct}
}
有更好的解决方案吗?

没有。
如果你想知道哪个变量是错的,你必须 测试特定变量

您可以减少一些文本的重复:

set errstr "your variable %s (value %s) is not correct"
if { $l1 == 0 } {
  return [format $errstr l1 $l1]
}
if { $l2 == 1 } {
  return [format $errstr l2 $l2]
}
但这只是编码风格,并没有那么重要。

不。
如果你想知道哪个变量是错的,你必须 测试特定变量

您可以减少一些文本的重复:

set errstr "your variable %s (value %s) is not correct"
if { $l1 == 0 } {
  return [format $errstr l1 $l1]
}
if { $l2 == 1 } {
  return [format $errstr l2 $l2]
}

但这只是编码风格,并没有那么重要。

这是另一种方式。是否更好取决于您:

foreach {name val} {l1 0 l2 1} {
    upvar 0 $name var
    if {$var == $val} {
        return "your variable $name is not correct"
    }
}

这是另一种方法。是否更好取决于您:

foreach {name val} {l1 0 l2 1} {
    upvar 0 $name var
    if {$var == $val} {
        return "your variable $name is not correct"
    }
}

在特定的情况下,特别是当你有很多变量,并且你确切地知道变量的边界(变量的最小值和最大值),你可以使用字典和

下面的示例中,每个变量可以有2个可能的值(0或1,这是一个基于如何计算Discord聊天权限的示例)

在上面的示例中,每个权限都具有以下值:

Perm     Hexadecimal   Binary      Decimal
perm1 -> 0x00000001 -> 00000001 ->   1
perm2 -> 0x00000002 -> 00000010 ->   2
perm3 -> 0x00000004 -> 00000100 ->   4
perm4 -> 0x00000008 -> 00001000 ->   8
perm5 -> 0x00000010 -> 00010000 ->  16
perm6 -> 0x00000020 -> 00100000 ->  32
perm7 -> 0x00000040 -> 01000000 ->  64
perm8 -> 0x00000080 -> 10000000 -> 128
特定的权限组合将具有单个权限的总和。例如,如果某人同时拥有perm1和perm4,则其总权限将为9。相反,将使用上述程序;i、 e.我们的值为9,我们想知道此人拥有哪些权限。因此,我们将执行
getpermlist9
,结果是:
perm1 perm4

在二进制中,9表示为:

00001001
perm1和perm4的个人权限如下:

00000001
00001000
将这两个数字相加(垂直相加)得到9的二进制表示形式。那么这里发生了什么

循环(
dict for
)将dict的每个值与我们希望获得详细信息的权限进行比较:

perm1
Binary:  00001001    Decimal:    9
       & 00000001             &  1
       = 00000001             =  1
由于结果大于0,因此perm1是授予总值为9的权限的权限之一

perm2
Binary:  00001001    Decimal:    9
       & 00000010             &  2
       = 00000000             =  0
由于结果为0,perm2不是授予总值为9的权限的权限之一。循环继续进行,我们发现它给出非零结果的唯一其他时间是perm4:

perm4
Binary:  00001001    Decimal:    9
       & 00001000             &  8
       = 00001000             =  8
你可以在我开始时的维基百科链接上看到bitwise&works,但本质上,
1&1
给出1,
1&0
0&1
0&0
都给出0


如果某人拥有所有权限,他们的权限值为255(1+2+4+…+128),如果您拥有
getpermlist255
,您将获得字典中列出的所有权限。

在特定情况下,尤其是当您有很多变量并且您确切知道变量的边界时(变量的最小值和最大值),您可以使用字典和

下面的示例中,每个变量可以有2个可能的值(0或1,这是一个基于如何计算Discord聊天权限的示例)

在上面的示例中,每个权限都具有以下值:

Perm     Hexadecimal   Binary      Decimal
perm1 -> 0x00000001 -> 00000001 ->   1
perm2 -> 0x00000002 -> 00000010 ->   2
perm3 -> 0x00000004 -> 00000100 ->   4
perm4 -> 0x00000008 -> 00001000 ->   8
perm5 -> 0x00000010 -> 00010000 ->  16
perm6 -> 0x00000020 -> 00100000 ->  32
perm7 -> 0x00000040 -> 01000000 ->  64
perm8 -> 0x00000080 -> 10000000 -> 128
并且一个特定的权限组合将具有单个权限的总和。例如,如果某人同时拥有perm1和perm4,则其总权限将为9。相反,将使用上面的过程;即,我们的值为9,我们希望知道此人拥有哪些权限。因此,我们将执行
getPermList 9
,然后获取结果:
perm1 perm4

在二进制中,9表示为:

00001001
perm1和perm4的个人权限如下:

00000001
00001000
把这两个数字相加(垂直相加)得到了9的二进制表示形式。那么这里发生了什么

循环(
dict for
)将dict的每个值与我们希望获得详细信息的权限进行比较:

perm1
Binary:  00001001    Decimal:    9
       & 00000001             &  1
       = 00000001             =  1
由于结果大于0,因此perm1是授予总值为9的权限的权限之一

perm2
Binary:  00001001    Decimal:    9
       & 00000010             &  2
       = 00000000             =  0
由于结果为0,因此perm2不是授予总值为9的权限的权限之一。循环继续进行,我们发现它给出非零结果的唯一其他时间是perm4:

perm4
Binary:  00001001    Decimal:    9
       & 00001000             &  8
       = 00001000             =  8
你可以在我开始时的维基百科链接上看到bitwise&works,但本质上,
1&1
给出1,
1&0
0&1
0&0
都给出0


如果某人拥有所有权限,他们的权限值将为255(1+2+4+…+128),如果您拥有
getPermList 255
,您将获得字典中列出的所有权限。

好的,谢谢你们,没有快速解决方案,只有编码风格如果我理解,我编辑了我的代码,只是为了突出显示我的名字{2 variables}好的,谢谢你们,没有快速修复的解决方案,只是编码风格如果我理解的话,我编辑了我的代码,只是为了突出显示我的{2 variables}的名称