Ruby中如何优雅实现适配两种输入格式的数组解构赋值
实现方案
方案1:Ruby 2.7+ 模式匹配写法(最优雅)
直接用Ruby内置的模式匹配语法一行实现,可读性极高:
main, alternative = data in [Array, Array] ? data : [data, nil]
运行验证:
- 输入
data = [1,2,3]:模式匹配不命中,返回[[1,2,3], nil],解构得到main = [1,2,3]、alternative = nil,符合预期 - 输入
data = [[1,2,3],['a','b','c']]:模式匹配命中,直接解构原数组,结果和原有逻辑完全一致
方案2:低版本Ruby兼容写法
如果需要兼容Ruby 2.7之前的版本,可以通过判断首元素类型实现,同样只有一行:
main, alternative = data[0].is_a?(Array) ? data : [data, nil]
因为你明确限定了data只会是两种格式之一,只要首元素是数组就对应第二种二维数组格式,否则对应第一种一维数组格式,逻辑完全可靠。
内容的提问来源于stack exchange,提问作者stratis
相关产品推荐
相关产品推荐

