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]