我想知道爲什麼這個語法對於傳播列表和映射不一致。例如,在這個代碼Groovy使用冒號分佈運算符映射語法
def list =[1,2,3]
def map =[a:1,b:2]
println "${[*list]}"
println "${[*:map]}"
列表鋪展單*,並與*地圖:
它是連接到如何傳播運營商內部工作?因爲沒有看到* map構造的任何其他用法(就像使用[:]定義空映射將它與列表區分開來一樣)。
我想知道爲什麼這個語法對於傳播列表和映射不一致。例如,在這個代碼Groovy使用冒號分佈運算符映射語法
def list =[1,2,3]
def map =[a:1,b:2]
println "${[*list]}"
println "${[*:map]}"
列表鋪展單*,並與*地圖:
它是連接到如何傳播運營商內部工作?因爲沒有看到* map構造的任何其他用法(就像使用[:]定義空映射將它與列表區分開來一樣)。
傳播運算符(*)用於從集合中提取條目並將它們作爲單個條目提供。
1.擴頻列表元素:
當文字列表內所使用的,操作者傳播充當如果傳播元件內容物內聯到列表:
def items = [4,5] def list = [1,2,3,*items,6] assert list == [1,2,3,4,5,6]
來源:http://docs.groovy-lang.org/latest/html/documentation/#_spread_list_elements
2.傳播地圖元素:
傳播地圖運算符的工作方式與傳播列表運算符類似,但是對於地圖。它可以讓你的地圖內容內嵌到另一個地圖的文字,像下面的例子:
def m1 = [c:3, d:4] def map = [a:1, b:2, *:m1] assert map == [a:1, b:2, c:3, d:4]
來源:http://docs.groovy-lang.org/latest/html/documentation/#_spread_map_elements
我發現等效語法'def map = [a:1,b :2] + m1'更具可讀性 –
是的,我也是,但@Vuk要求'*:'的意義,所以我給了他一個例子。 –
感謝您的回答。我已經閱讀過文檔,但問題是爲什麼同一個操作符在一個用例中使用*而在另一個*:符號中。由於時髦往往會盡可能簡化事情,所以猜測一定有一個很好的理由。 –
'*:'只是一個運營商,像'*'或'?:'或'+'......它與內部的工作方式沒有關係,它只是運營商傳播地圖的_「名稱」 –