Ruby中如何初始化数组并添加nil值?Array.wrap无法满足需求
解决初始化包含nil的数组需求
我完全懂你的困扰——想用类似Array.add(nil)的方式得到包含nil的数组,但Array.wrap(nil)返回的却是空数组[],这其实是因为Array.wrap(这是Rails Active Support提供的方法)的设计逻辑就是如此:当传入参数为nil时,它会直接返回空数组,而不是将nil作为单个元素封装成数组。
下面给你几个实用的解决方案:
直接字面量初始化:这是最简单直接的方式,一步就能得到你想要的数组:
list = [nil] # => [nil]先初始化空数组再添加元素:如果后续还需要往数组里追加其他元素,这种方式更灵活:
list = [] list << nil # 此时 list 的值就是 [nil]自定义
Array.add方法:如果你确实需要一个类似Array.add的方法来实现这个功能,可以自己给Array类扩展一个方法:class Array def self.add(element) [element] end end # 调用后就能得到预期结果 list = Array.add(nil) # => [nil]
补充一下:Array.wrap的核心用途是把非数组的对象(除nil外)转换为数组,比如Array.wrap(5)会返回[5],Array.wrap("test")返回["test"],但它特意把nil处理为空数组,这是为了适配一些“空值就返回空集合”的场景,所以不符合你的需求是正常的~
内容的提问来源于stack exchange,提问作者nanakondor
相关产品推荐
相关产品推荐

