如何在一个if
语句块中检查多个变量的类型,而不使用多个if
语句?例如:
If var1 is not integer
{
MsgBox, 0, Error, var1 is not integer
Return
}
If var2 is not integer
{
MsgBox, 0, Error, var2 is not integer
Return
}
我想要做的是检查单个布尔表达式中的类型。
我试过这个,但它不起作用。
if ((var1 is not integer) or (var2 is not integer))
{
MsgBox, 0, Error, variables are not integers
Return
}
答案 0 :(得分:2)
AHK中的特殊If
命令,如If var [not] between
,If var [not] in/contains MatchList
, If var is [not] type
,IfWin...
不是实际的布尔表达式,所以你不能使用布尔运算符链接它们
但是,这些条件语句可以包含在函数中。此外,If var is [not] type
可以使用RegEx重建:
isInteger(arg) {
if arg is integer
return true
else
return false
}
if(isInteger(123) && isInteger(456)) {
MsgBox, yay!
}
if(RegExMatch(123, "^\d+$") && RegExMatch(456, "^\d+$")) {
msgbox, hooray!
}
如果您有兴趣,请查看数组值,复制脚本并运行它。您可能会发现一些结果令人惊讶。我们的包装函数和RegExMatch
都提供了相同的背靠背结果。
arr := [123, 456, 123.456, "789", "not_an_integer!", true, false]
msg := ""
Loop % arr.MaxIndex()
{
msg .= arr[A_Index]
msg .= ":`tisInteger(): " isInteger(arr[A_Index])
msg .= " RegExMatch(): " RegExMatch(arr[A_Index], "^\d+$")
msg .= "`n"
}
msgbox % msg
isInteger(arg) {
if arg is integer
return true
else
return false
}