在我的情况下,使用OR无效,我必须使用AND,而且不确定为什么。
buttonPressed = (text) => {
console.log(text)
}
答案 0 :(得分:7)
您的示例很难理解,但是您可能只是对运算符的性质感到困惑。
考虑真相表;如果至少一个操作数为Or
,则True
操作的结果为True
:
True Or True => True
True Or False => True
False Or True => True
False Or False => False
类似地,如果两个操作数均为And
,则True
操作的结果为True
:
True And True => True
True And False => False
False And True => False
False And False => False
如果有帮助,您可以将Or
可视化为+
(加法),将And
可视化为*
(乘法),其中False
0
和True
为“非零”:
1 Or 1 => 1 + 1 => True
1 Or 0 => 1 + 0 => True
0 Or 1 => 0 + 1 => True
0 Or 0 => 0 + 0 => False
1 And 1 => 1 * 1 => True
1 And 0 => 1 * 0 => False
0 And 1 => 0 * 1 => False
0 And 0 => 0 * 0 => False
答案 1 :(得分:0)
VBA Or
不起作用,因为当Environ("username")
是我时,它不是其他用户,反之亦然。
您要确保这两种可能性都不存在,因此您需要And
。
答案 2 :(得分:0)
让我们分解一下。我必须假设"me"
是您自己的用户名。该测试的结果是:
False, True, True
Debug.Print LCase(Environ("username")) <> "me"
Debug.Print LCase(Environ("username")) <> "some other user"
Debug.Print LCase(Environ("username")) <> "me" Or LCase(Environ("username")) <> "some other user"
这是我的预期行为。
答案 3 :(得分:0)
这可以用DeMorgan's laws来解释。如果我们采取:
If LCase(Environ("username")) <> "me" Or LCase(Environ("username")) <> "some other user" Then
然后我们可以通过将<>
替换为=
,然后用Not
取反每个术语来重写它:
If Not(LCase(Environ("username")) = "me") Or Not(LCase(Environ("username")) = "some other user") Then
使用德摩根定律,只要将Or
运算符更改为And
运算符,就可以对整个表达式应用单个否定项:
If Not(LCase(Environ("username")) = "me" And LCase(Environ("username")) = "some other user") Then
LCase(Environ("username")
不可能同时等于两个不同的值,因此And
条件将为False。应用Not
运算符意味着,无论“用户名”的值如何,整个表达式将始终为True。
对于使用And
而非Or
的更正版本,步骤如下:
If LCase(Environ("username")) <> "me" And LCase(Environ("username")) <> "some other user" Then
将<>
更改为=
并应用Not
运算符:
If Not(LCase(Environ("username")) = "me") And Not(LCase(Environ("username")) = "some other user") Then
应用德摩根定律:
If Not(LCase(Environ("username")) = "me" Or LCase(Environ("username")) = "some other user") Then
现在,如果用户名是“ me”或用户名是“其他用户”,则Or
条件的结果将为True,而Not
运算符将根据需要将其更改为False。 / p>
如果用户名是其他任何值,则Or
条件的值为False,Not
运算符将根据需要将其更改为True