mirror of
https://github.com/golang/go
synced 2024-11-21 20:04:44 -07:00
go spec: ... changes
Also: Fixed a bug in the BuiltinCall production. R=iant, r, rsc CC=golang-dev https://golang.org/cl/2278041
This commit is contained in:
parent
6f32c82953
commit
ac771a8a47
@ -1,5 +1,5 @@
|
|||||||
<!-- title The Go Programming Language Specification -->
|
<!-- title The Go Programming Language Specification -->
|
||||||
<!-- subtitle Version of Sep 7, 2010 -->
|
<!-- subtitle Version of Sep 24, 2010 -->
|
||||||
|
|
||||||
<!--
|
<!--
|
||||||
TODO
|
TODO
|
||||||
@ -994,13 +994,12 @@ type stands for one item of that type. Parameter and result
|
|||||||
lists are always parenthesized except that if there is exactly
|
lists are always parenthesized except that if there is exactly
|
||||||
one unnamed result it may be written as an unparenthesized type.
|
one unnamed result it may be written as an unparenthesized type.
|
||||||
</p>
|
</p>
|
||||||
<p>
|
|
||||||
If the function's last parameter has a type prefixed with <code>...</code>,
|
|
||||||
the function may be invoked with zero or more arguments for that parameter,
|
|
||||||
each of which must be <a href="#Assignability">assignable</a>
|
|
||||||
to the type that follows the <code>...</code>.
|
|
||||||
Such a function is called <i>variadic</i>.
|
|
||||||
|
|
||||||
|
<p>
|
||||||
|
The final parameter in a function signature may have
|
||||||
|
a type prefixed with <code>...</code>.
|
||||||
|
A function with such a parameter is called <i>variadic</i> and
|
||||||
|
may be invoked with zero or more arguments for that parameter.
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
<pre>
|
<pre>
|
||||||
@ -2185,7 +2184,8 @@ Selector = "." identifier .
|
|||||||
Index = "[" Expression "]" .
|
Index = "[" Expression "]" .
|
||||||
Slice = "[" [ Expression ] ":" [ Expression ] "]" .
|
Slice = "[" [ Expression ] ":" [ Expression ] "]" .
|
||||||
TypeAssertion = "." "(" Type ")" .
|
TypeAssertion = "." "(" Type ")" .
|
||||||
Call = "(" [ ExpressionList [ "," ] ] ")" .
|
Call = "(" [ ArgumentList [ "," ] ] ")" .
|
||||||
|
ArgumentList = ExpressionList [ "..." ] .
|
||||||
</pre>
|
</pre>
|
||||||
|
|
||||||
|
|
||||||
@ -2612,9 +2612,9 @@ then within the function the argument is equivalent to a parameter of type
|
|||||||
<code>[]T</code>. At each call of <code>f</code>, the argument
|
<code>[]T</code>. At each call of <code>f</code>, the argument
|
||||||
passed to the final parameter is
|
passed to the final parameter is
|
||||||
a new slice of type <code>[]T</code> whose successive elements are
|
a new slice of type <code>[]T</code> whose successive elements are
|
||||||
the actual arguments. The length of the slice is therefore the
|
the actual arguments, which all must be <a href="#Assignability">assignable</a>
|
||||||
number of arguments bound to the final parameter and
|
to the type <code>T</code>. The length of the slice is therefore the number of
|
||||||
may differ for each call site.
|
arguments bound to the final parameter and may differ for each call site.
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
<p>
|
<p>
|
||||||
@ -2626,20 +2626,31 @@ Greeting("hello:", "Joe", "Anna", "Eileen")
|
|||||||
</pre>
|
</pre>
|
||||||
|
|
||||||
<p>
|
<p>
|
||||||
Within <code>Greeting</code>, <code>who</code> will have value
|
within <code>Greeting</code>, <code>who</code> will have the value
|
||||||
<code>[]string{"Joe", "Anna", "Eileen"}</code>
|
<code>[]string{"Joe", "Anna", "Eileen"}</code>
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
If the final argument is of slice type <code>[]T</code>, it may be passed unchanged as the value
|
||||||
|
for a <code>...T</code> parameter if the argument is followed by <code>...</code>.
|
||||||
|
In this case no new slice is created.
|
||||||
|
</p>
|
||||||
|
|
||||||
<p>
|
<p>
|
||||||
As a special case, if a function passes its own <code>...</code> parameter
|
Given the slice <code>s</code> and call
|
||||||
as the <code>...</code> argument in a call to another function with
|
|
||||||
a <code>...</code> parameter of <a href="#Type_identity">identical type</a>,
|
|
||||||
the parameter is passed directly. In short, a formal <code>...</code>
|
|
||||||
parameter is passed unchanged as an actual <code>...</code> parameter provided the
|
|
||||||
types match.
|
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
|
<pre>
|
||||||
|
s := []string{"James", "Jasmine"}
|
||||||
|
Greeting("goodbye:", s...)
|
||||||
|
</pre>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
within <code>Greeting</code>, <code>who</code> will have the same value as <code>s</code>
|
||||||
|
with the same underlying array.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
|
||||||
<h3 id="Operators">Operators</h3>
|
<h3 id="Operators">Operators</h3>
|
||||||
|
|
||||||
<p>
|
<p>
|
||||||
@ -4350,7 +4361,7 @@ they cannot be used as function values.
|
|||||||
</p>
|
</p>
|
||||||
|
|
||||||
<pre class="ebnf">
|
<pre class="ebnf">
|
||||||
BuiltinCall = identifier "(" [ BuiltinArgs ] ")" .
|
BuiltinCall = identifier "(" [ BuiltinArgs [ "," ] ] ")" .
|
||||||
BuiltinArgs = Type [ "," ExpressionList ] | ExpressionList .
|
BuiltinArgs = Type [ "," ExpressionList ] | ExpressionList .
|
||||||
</pre>
|
</pre>
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user