我尝试在我的VB脚本中的单个If语句中使用And
和Or
关键字,我使用VLC Media Player使用命令行进行流式处理。
我尝试过这样:
If (CurrentEP >= 2) And (CStr(TSNStr) = CStr(PTSNStr)) And (((CInt(TSSEPStr) - CInt(PTSSEPStr)) <= 5) Or ((CInt(TSSEPStr) - CInt(PTSSEPStr)) >= -5)) Then
我尝试将括号用于整个If
语句,但它什么也没做。
If ((CurrentEP >= 2) And (CStr(TSNStr) = CStr(PTSNStr)) And (((CInt(TSSEPStr) - CInt(PTSSEPStr)) <= 5) Or ((CInt(TSSEPStr) - CInt(PTSSEPStr)) >= -5))) Then
当我执行我的脚本时,只有以下两个条件似乎有效。
1.If ((CurrentEP >= 2) Then '<< FIRST CONDITION
2.If (CStr(TSNStr) = CStr(PTSNStr)) Then '<< SECOND CONDITION
第三个条件
(((CInt(TSSEPStr) - CInt(PTSSEPStr)) <= 5) Or ((CInt(TSSEPStr) - CInt(PTSSEPStr)) >= -5)))
始终评估为false,这应检查TSSEPStr
和PTSSEPStr
的差异是否小于/等于5或大于/等于-5。
我想知道是否可以在一个语句中使用Or
关键字,该语句也与VB Script中的多个其他And
个关键字一起使用。
答案 0 :(得分:2)
在@ GaryEvans的回答的帮助下,我发现这条线总是被评估为假,因为使用了太多的括号。
我做了一个小改动,以下一行按照我的预期运作:
If (CurrentEP >= 2) And (CStr(TSNStr) = CStr(PTSNStr)) And (CInt(TSSEPStr) - CInt(PTSSEPStr) <= 5) And (CInt(TSSEPStr) - CInt(PTSSEPStr) >= -5) Then
使它更短更清晰:
If (CurrentEP >= 2) And (CStr(TSNStr) = CStr(PTSNStr)) And (CInt(TSSEPStr - PTSSEPStr) <= 5) And (CInt(TSSEPStr - PTSSEPStr) >= -5) Then
答案 1 :(得分:1)
是的,有可能,魔鬼在细节,所有关于考虑所有可能的路径并密切关注决定评估顺序的包围(从你的代码看,你很清楚)。
最深的方括号评估首先进行,然后是下一级,直到达到顶部。例如(您可以在Excel中尝试此操作): -
5 / 4 * 3 / 2 = 1.875
5 / (4 * 3) / 2 = 0.208333333
评估结果为: -
1.25 * 3 / 2
3.75 / 2
1.875
和
5 / 12 / 2
0.416666667 / 2
0.208333333
还有一个算术order of precedence也可以在 想要阅读的地方发挥作用。
此外,(您可能也知道这一点) AND
评估中的所有元素必须为True
,结果为True
。 OR
评估中True
的任何元素都会产生True
。
True
AND
True
AND
True
= True
True
AND
True
AND
False
= False
True
OR
True
OR
True
= True
True
OR
True
OR
False
= True
您还可以添加括号来调整订单评估: -
True
AND
(True
AND
True
)= True
True
AND
(True
OR
False
)= True
False
OR
(False
AND
True
)= False
对于你的问题,我认为你有大于和小于混合,也有轻微到很多包围,但它应该已经评估了。
1&gt; 2 = False
2&gt; 1 = True
2&gt; 2 = False
1&lt; 2 = True
2&lt; 1 = False
2&lt; 2 = False
让我们致电CInt(TSSEPStr) - CInt(PTSSEPStr)
i
: -
i = 0
(i >= 5) Or (i <= -5) = (False) Or (False) = False
0不大于或等于5,0不小于或等于-5
i = 10
(i >= 5) Or (i <= -5) = (True) Or (False) = True
10大于或等于5,10不小于或等于-5
这就是说它必须是 -5到5的范围。如果我们翻转大于/小于运算符,它说必须 范围为-5到5,我们还需要将Or
更改为And
。
i = 0
(i <= 5) And (i >= -5) = (True) And (True) = True
0小于或等于5,0小于或等于-5
i = 10
(i <= 5) And (i >= -5) = (False) And (True) = False
10不小于或等于5,10大于或等于-5
If (CurrentEP >= 2) And (CStr(TSNStr) = CStr(PTSNStr)) And (CInt(TSSEPStr) - CInt(PTSSEPStr) >= 5) And (CInt(TSSEPStr) - CInt(PTSSEPStr) <= -5) Then
希望这有帮助。
答案 2 :(得分:0)
由于优先级和评估顺序,有许多条件总是使评估变得棘手。您可能希望查看与vb-script相关的规则。解决方案通常是像您尝试过的括号,但我怀疑您需要在前两个条件中再添加一对,例如:
If (((CurrentEP >= 2) And (CStr(TSNStr) = CStr(PTSNStr))) And (((CInt(TSSEPStr) - CInt(PTSSEPStr)) <= 5) Or ((CInt(TSSEPStr) - CInt(PTSSEPStr)) >= -5))) Then