如何否定析取

发布于 2024-11-18 10:20:44 字数 505 浏览 3 评论 0原文

我对 Enumerator#reject 在红宝石中。考虑以下代码:

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

以下行不应该是等效的吗?

(1..10).reject {|i| i % 3 != 0 || i % 5 != 0 } => []

如果我只在拒绝方法上使用一个条件,结果将符合预期。但如果我包含 OR 运算符,结果将为空。有人可以帮我澄清一下吗?

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

I am a little confused with Enumerator#reject in ruby. Consider the following code:

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

Shouldn't the following line be equivalent?

(1..10).reject {|i| i % 3 != 0 || i % 5 != 0 } => []

If I just use one condition on the reject method, the result is as expected. but If I include the OR operator the result turns out to be empty. Could somebody clarify this for me.

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

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

所有深爱都是秘密 2024-11-25 10:20:44

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

!(A || B) 相当于 !A && !B 且不等于 !A || !B

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

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

You are making a basic logic mistake:

!(A || B) is equivalent to !A && !B and NOT equivalent to !A || !B.

So if you change the || in your second example to a &&, then your second example would give the same result as the first:

(1..10).reject {|i| i % 3 != 0 && i % 5 != 0 } # => [3, 5, 6, 9, 10]
┈┾☆殇 2024-11-25 10:20:44

您遇到了德摩根定律之一。

pq = Not((不是 p) 或    (不是 q))
p 或者   q = Not((Not p) And (Not q))

很接近,但您忘记更改运算符。

You have run into one of De Morgan's laws.

p And q = Not((Not p) Or   (Not q))
p Or   q = Not((Not p) And (Not q))

It was close, but you forgot to change the operator.

浅唱ヾ落雨殇 2024-11-25 10:20:44

在第二段代码中,您更改了相等性,因此您需要将 || 更改为 &&

(1..10).reject {|i| i % 3 != 0 && i % 5 != 0 } => [3, 5, 6, 9, 10]

In the second piece of code, you changed the equality, so you'll need to change the || to &&.

(1..10).reject {|i| i % 3 != 0 && i % 5 != 0 } => [3, 5, 6, 9, 10]
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文