【问题标题】:Meaning of Ruby "===" operator on RangesRuby“===”运算符在 Ranges 上的含义
【发布时间】:2012-11-23 10:50:34
【问题描述】:

我最近开始学习 Ruby,正在阅读以下Ruby Manual

在本手册中,他们说以下(关于范围):

通用范围的最终用途是作为区间测试:查看是否 某个值落在范围表示的区间内。这是 使用 ===(大小写相等运算符)完成。

这些例子:

  • (1..10) === 5 » 真
  • (1..10) === 15 » 错误
  • (1..10) === 3.14159 » 真
  • ('a'..'j') === 'c' » 真
  • ('a'..'j') === 'z' » 假

在阅读了 Ruby "===" 运算符 here 之后,我发现这适用于范围,因为 Ruby 将其转换为 case 语句。

因此,您可能希望能够将范围放入您的案例语句中, 并让它被选中。另外,请注意 case 语句转换为 b===a 在 case a 等语句中,当 b then true 结束时。

但是我有以下问题:为什么下面的命令返回 true?

(1..10) === 3.14159 » 真

由于 (1..10) 表示 [1, 2, 3, 4, 5, 6, 7, 8, 9, 10],我预计结果会是错误的。

【问题讨论】:

    标签: ruby operators range


    【解决方案1】:

    1..10 表示数学意义上的从 0 到 10 的 Range,因此包含 3.14259

    [1,2,3,4,5,6,7,8,9,10]相同。

    这个数组是 Range#each 方法的结果,Enumerable#to_a 使用它来构造对象的数组表示,只产生包含的整数值 在 Range 中,因为产生所有实数值意味着遍历无限数量的元素。

    【讨论】:

      猜你喜欢
      • 2017-03-15
      • 1970-01-01
      • 1970-01-01
      • 2016-08-16
      • 1970-01-01
      • 2012-08-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多