当前位置:  开发笔记 > 后端 > 正文

在Ruby中使用Range填充数组的正确方法

如何解决《在Ruby中使用Range填充数组的正确方法》经验,为你挑选了4个好方法。

我正在编写一本书,其中给出了使用"to_a"方法将Ranges转换为等效数组的示例

当我在irb中运行代码时,我收到以下警告

 warning: default `to_a' will be obsolete

使用to_a的正确替代方法是什么?

有没有其他方法用Range填充数组?



1> Zamith..:

您可以使用splat创建一个带有范围的数组,

>> a=*(1..10)
=> [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

使用Kernel Array方法,

Array (1..10)
=> [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

或使用to_a

(1..10).to_a
=> [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]


你对splat的使用是令人讨厌的.更好看的选项是`[*1..10]`.
Splat选项不适用于Ruby 1.8.7,我建议使用`(1..10).to_a`以实现向后兼容
什么是最快的方法?

2> Daniel Lucra..:

这对我来说非常有用:

irb> (1..4).to_a
=> [1, 2, 3, 4]

我注意到:

irb> 1..4.to_a
(irb):1: warning: default `to_a' will be obsolete
ArgumentError: bad value for range
        from (irb):1

也许你错过了括号?

(我正在运行Ruby 1.8.6 patchlevel 114)


**说明**:没有括号,你从Fixnum类的一个实例(在这种情况下为4)调用to_a方法,而不是在范围1..4上.如果在ruby 1.9.2中运行`Fixnum.methods.include?(to_a)`,你会注意到不再定义to_a方法,因此你在08年获得折旧消息的原因

3> Richard Turn..:

听起来像你这样做:

0..10.to_a

警告来自Fixnum#to_a,而不是来自Range#to_a.试试这个:

(0..10).to_a



4> Boris Stitni..:

检查一下:

a = [*(1..10), :top, *10.downto( 1 )]


*10.downto(1)就是我想要的,谢谢!
推荐阅读
wangtao
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有