Ruby中星号打包解包操作
程序员文章站
2022-06-09 21:24:42
Ruby中可以使用一个星号 和两个星号 完成一些打包、解包操作,它们称为splat操作符: 一个星号:以数组为依据进行打包解包( "参考文章" ) 两个星号:以hash为依据进行打包解包( "参考文章" ) 两个星号的splat场景很少见,如有必要可参考上面列出的参考文章。 当splat操作符后面跟 ......
ruby中可以使用一个星号*
和两个星号**
完成一些打包、解包操作,它们称为splat操作符:
- 一个星号:以数组为依据进行打包解包()
- 两个星号:以hash为依据进行打包解包()
两个星号的splat场景很少见,如有必要可参考上面列出的参考文章。
当splat操作符后面跟的是数组,则进行数组解包操作:解包成元素列表。这个解包效果在调用函数并传参时比较能体现出来。
def f(a,b,c,d) p "1.#{a}" p "2.#{b}" p "3.#{c}" p "4.#{d}" end arr=%w(aa bb cc dd) f(*arr) # 赋值解包:将数组解包成元素列表再赋值给arr变量 # 这过程中会创建一个新的数组保存解包后但要赋值的各元素 arr=*[1,2,3]
上面的*arr
中,splat操作符后面跟的是一个数组,所以它做了解包操作,将数组解包成了4个元素,并依次赋值给参数a、b、c、d。
当splat操作符后面跟的是一个或多个元素,则进行数组打包操作:创建一个新数组保存这些元素。这个在函数定义中比较常见,很偶尔的在赋值的时候也能见到。
def foo(a,b,*args) p a p b p args #=> 打包成[3,4,5]赋值给参数args end foo(1,2,3,4,5)
下面的打包、解包示例比较经典:
a,*x=1,2,3 #=> a=1,x=[2,3] a, (b, *c), *d = 1, [2, 3, 4], 5, 6 #=> a=1,b=2,c=[3, 4],d=[5, 6]
上一篇: day011_步入百万年薪的第十一天
下一篇: Python函数参数与参数解构