Ruby中能够使用一个星号*
和两个星号**
完成一些打包、解包操做,它们称为splat操做符:数组
两个星号的splat场景不多见,若有必要可参考上面列出的参考文章。ruby
当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。code
当splat操做符后面跟的是一个或多个元素,则进行数组打包操做:建立一个新数组保存这些元素。这个在函数定义中比较常见,很偶尔的在赋值的时候也能见到。blog
def foo(a,b,*args) p a p b p args #=> 打包成[3,4,5]赋值给参数args end foo(1,2,3,4,5)
下面的打包、解包示例比较经典:get
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]