true:在 ruby​​ 1.9 中慢,在 ruby​​ 1.8 中-6ren">
gpt4 book ai didi

ruby - 为什么 ruby​​ 中给定语句的输出为真?

转载 作者:数据小太阳 更新时间:2023-10-29 07:30:19 24 4
gpt4 key购买 nike

我在范围 triples = "AAA".."ZZZ" 上调用了以下语句:

  1. triples.include? "ABC"# => true:在 ruby​​ 1.9 中慢,在 ruby​​ 1.8 中快

    我明白为什么输出是 true,但不明白为什么它在 ruby​​ 1.8 中很快而在 ruby​​ 1.9 中很慢。

  2. triples.include? "ABCD"# => false: ruby​​ 1.9 and true: ruby​​ 1.8

    我不明白为什么两个版本的输出不同。

  3. triples.cover? "ABCD"# => 在 ruby​​ 1.9 中真实且快速

    和第二个语句一样的问题。

为什么 cover?include? 语句在 ruby​​ 1.9 中不同?

最佳答案

在 Ruby >= 1.9 中,include?遍历范围内的每个元素并检查给定元素是否存在。

cover?只检查元素是否 >= 第一个元素范围和 <= 该范围的最后一个元素。

由于 Ruby 对字符串进行排序的方式(词法), "ABCD" > "AAA""ABCD" < "ZZZ" .

在 Ruby 1.8 中,include?被视为 Ruby 1.9 的 cover? .

为了回答您关于它们为何不同的问题,您的示例很好地说明了这两种不同方法的必要性。

例如,如果你想检查一个数字是否在一个数字范围内,(0..1_000_000_000).cover?(1_000_000_001)include? 快得多-- 检查两个元素而不是十亿个。

但是,您的示例说明了为什么 include?是必要的:"ABCD"实际上不包含在("AAA".."ZZZ")范围内, 但它被它覆盖了。

关于ruby - 为什么 ruby​​ 中给定语句的输出为真?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19762932/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com