如何否定分离

jhe*_*uez 1 ruby boolean-logic demorgans-law

我对于在ruby中的Enumerator #deject感到困惑.请考虑以下代码:

(1..10).select {|i| i % 3 == 0 || i % 5 == 0 } => [3, 5, 6, 9, 10]
Run Code Online (Sandbox Code Playgroud)

以下行不应该相同吗?

(1..10).reject {|i| i % 3 != 0 || i % 5 != 0 } => []
Run Code Online (Sandbox Code Playgroud)

如果我只在reject方法上使用一个条件,结果就像预期的那样.但如果我包含OR运算符,结果结果为空.有人可以为我澄清这一点.

(1..10).reject {|i| i % 3 != 0} => [3, 6, 9]
Run Code Online (Sandbox Code Playgroud)

Dav*_*son 8

你犯了一个基本的逻辑错误:

!(A || B)相当于!A && !B而不等同于!A || !B.

因此,如果您||将第二个示例更改为a &&,那么您的第二个示例将给出与第一个示例相同的结果:

(1..10).reject {|i| i % 3 != 0 && i % 5 != 0 } # => [3, 5, 6, 9, 10]
Run Code Online (Sandbox Code Playgroud)