]> Cypherpunks repositories - gostls13.git/commitdiff
go spec: relaxed syntax for array, slice, and map composite literals
authorRobert Griesemer <gri@golang.org>
Fri, 22 Oct 2010 15:58:52 +0000 (08:58 -0700)
committerRobert Griesemer <gri@golang.org>
Fri, 22 Oct 2010 15:58:52 +0000 (08:58 -0700)
For elements which are themselves composite literals, the type may
be omitted if it is identical to the element type of the containing
composite literal.

R=r, rsc, iant, ken2
CC=golang-dev
https://golang.org/cl/2661041

doc/go_spec.html

index 2373490c249c44208e0a09d8b5ce7d002799c51d..41368309de2b09621da31812f3f8c60e40f4f971 100644 (file)
@@ -1,5 +1,5 @@
 <!-- title The Go Programming Language Specification -->
-<!-- subtitle Version of Sep 28, 2010 -->
+<!-- subtitle Version of Oct 21, 2010 -->
 
 <!--
 TODO
@@ -1971,15 +1971,16 @@ a single expression or a key-value pair.
 </p>
 
 <pre class="ebnf">
-CompositeLit  = LiteralType "{" [ ElementList [ "," ] ] "}" .
+CompositeLit  = LiteralType LiteralValue .
 LiteralType   = StructType | ArrayType | "[" "..." "]" ElementType |
                 SliceType | MapType | TypeName .
+LiteralValue  = "{" [ ElementList [ "," ] ] "}" .
 ElementList   = Element { "," Element } .
 Element       = [ Key ":" ] Value .
 Key           = FieldName | ElementIndex .
 FieldName     = identifier .
 ElementIndex  = Expression .
-Value         = Expression .
+Value         = Expression | LiteralValue .
 </pre>
 
 <p>
@@ -2093,6 +2094,17 @@ and is a shortcut for a slice operation applied to an array literal:
 [n]T{x1, x2, ... xn}[0 : n]
 </pre>
 
+<p>
+Within a composite literal of array, slice, or map type <code>T</code>,
+elements that are themselves composite literals may elide the respective
+literal type if it is identical to the element type of <code>T</code>.
+</p>
+
+<pre>
+[...]Point{{1.5, -3.5}, {0, 0}}  // same as [...]Point{Point{1.5, -3.5}, Point{0, 0}}
+[][]int{{1, 2, 3}, {4, 5}}       // same as [][]int{[]int{1, 2, 3}, []int{4, 5}}
+</pre>
+
 <p>
 A parsing ambiguity arises when a composite literal using the
 TypeName form of the LiteralType appears between the