今天,我发现了在Ruby中分割数组的有趣方法:

a = [0,1,2,3,4]
p a[...4] == a[0...4] # True
p a[...4] # [0,1,2,3]

请解释一下这是怎么回事.(...4) => (nil...4).但在写入(...4).to_a时出现错误:无法从NilClass迭代.

推荐答案

Ruby 2.6引入了无穷无尽的范围:

# It's the same
2..
2..nil
Range.new(2, nil)

Ruby 2.7引入了无起点的范围:

# It's the same
..2
nil..2
Range.new(nil, 2)

Array#[] WITH RANGE返回由索引范围指定的子数组

索引从0开始,因此当使用无开始范围时,它返回从第一个元素到指定元素的子array.同样地,对于无尽的

同时,您不会遍历这些范围,您只需要获取与这些范围匹配的元素

a = [0, 1, 2, 3, 4]

a[..2] # => [0, 1, 2]
a[2..] # => [2, 3, 4]

但是当您try 将无开始/无限范围转换为数组(或try 迭代它)时,当然会得到异常,因为数组不可能有无限数量的元素,数组总是有大小

这就是为什么(2..).to_a(..2).to_a会引发异常

Ruby相关问答推荐

如何返回此 OOP Ruby 代码最后一行中的变量?

Ruby 中无法解释的撬动行为

Sinatra + Bundler?

Ruby $:.unshift File.dirname(__FILE__)

如何关闭 Rails 3.1 上的自动样式表/javascript 生成?

在 Go (golang) 中编写一个 Ruby 扩展

Ruby:将unix时间戳转换为日期

如何将两周时间添加到 Time.now?

使用 bundler 安装较新版本的 bundler

Ruby 中的排序稳定吗?

如何在运行时判断 Ruby 中的 Gem 版本?

警告! PATH 设置不正确,通常这是由 shell 初始化文件引起的

如何设置方法测试中使用的私有实例变量?

将整个文本文件作为单个字符串读取的合理方法是什么?

使用正则表达式进行 Ruby Electron邮件验证

obj.nil?与 obj == nil

如何在Ruby中将字符串拆分为仅具有给定字符的两部分?

如何在不为 RVM 用户授予 sudo 访问权限的情况下安装 RVM 系统要求

Ruby 的 %q / %Q 引用方法的用例是什么?

从 'mm/dd/yyyy' 格式解析 ruby​​ DateTime