“操作员”;或;TCL
这不是一个与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
写入时,可以知道哪个变量不正确:
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}的名称