当前位置:  开发笔记 > 编程语言 > 正文

Ruby:Object.to_a替代品

如何解决《Ruby:Object.to_a替代品》经验,为你挑选了2个好方法。

我需要将传入的参数(单个对象或集合)转换为Array.我不知道论点是什么.如果它已经是一个数组,我想留下它,否则从它创建一个单元素数组.我想要允许method(:objs => obj)method(:objs => [obj1, obj2])

这似乎是最好的方法(Array#to_a返回self):

arg = arg.to_a

但红宝石文档说Object#to_a很快就会过时了.有方便的更换吗?

还有比这更简洁的东西吗?

arg = arg.respond_to?(:to_a) ? arg.to_a : [arg]

Grant Hutchi.. 45

使用方法Kernel#Array:

Array([1,2,3]) #=> [1, 2, 3]
Array(123) #=> [123]

是的,它起初可能看起来像一个类,但这实际上是一个以大写字母开头的方法.



1> Grant Hutchi..:

使用方法Kernel#Array:

Array([1,2,3]) #=> [1, 2, 3]
Array(123) #=> [123]

是的,它起初可能看起来像一个类,但这实际上是一个以大写字母开头的方法.


但要注意以下几点:1)如果将散列传递给Array(),则会得到hash.to_a,而不是[hash].2)如果你将nil传递给Array(),你将获得[],而不是[nil].
只需清楚一点,nil.to_a和Array(nil)都返回一个空数组。

2> Michael Kohl..:

哇,有人只是暗示了一个非常古老的线索.:-O但是因为我还没有看到它包含在内,所以我将为完整性添加一条方法:

arg = [*arg]

如果它已经是一个数组(因此删除了一个嵌套级别)或者创建一个参数数组,这将抛出该参数:否则:

arg = [1,2,3]
[*arg] #=> [1, 2, 3]
arg = 1
[*arg] #=> [1]

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