Ruby中星號打包解包操做

Ruby中能夠使用一個星號*和兩個星號**完成一些打包、解包操做,它們稱爲splat操做符:數組

  • 一個星號:以數組爲依據進行打包解包(參考文章)
  • 兩個星號:以hash爲依據進行打包解包(參考文章)

兩個星號的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]
相關文章
相關標籤/搜索