diff options
author | Robert Griesemer <gri@golang.org> | 2009-02-11 15:09:15 -0800 |
---|---|---|
committer | Robert Griesemer <gri@golang.org> | 2009-02-11 15:09:15 -0800 |
commit | a0cfe5c034413449494b330fd538bfdccadb6b2b (patch) | |
tree | 5653f5a7bca17563fc18ff8116bdb9a17a5d6dcd | |
parent | f61fef6f099a8ab2c009b4f9904569d38d0744e8 (diff) | |
download | golang-a0cfe5c034413449494b330fd538bfdccadb6b2b.tar.gz |
- language for embedded interfaces (as discussed this morning)
- fixed a syntax error
R=r
DELTA=17 (15 added, 0 deleted, 2 changed)
OCL=24876
CL=24889
-rw-r--r-- | doc/go_spec.txt | 19 |
1 files changed, 17 insertions, 2 deletions
diff --git a/doc/go_spec.txt b/doc/go_spec.txt index cddcf983e..7417e03c4 100644 --- a/doc/go_spec.txt +++ b/doc/go_spec.txt @@ -1218,7 +1218,7 @@ types (§Types). StructType = "struct" [ "{" [ FieldDeclList ] "}" ] . FieldDeclList = FieldDecl { ";" FieldDecl } [ ";" ] . - FieldDecl = (IdentifierList CompleteType | TypeName) [ Tag ] . + FieldDecl = (IdentifierList CompleteType | [ "*" ] TypeName) [ Tag ] . Tag = StringLit . // An empty struct. @@ -1387,7 +1387,7 @@ the set of methods specified by the interface type, and the value "nil". InterfaceType = "interface" [ "{" [ MethodSpecList ] "}" ] . MethodSpecList = MethodSpec { ";" MethodSpec } [ ";" ] . - MethodSpec = IdentifierList Signature . + MethodSpec = IdentifierList Signature | TypeName . // An interface specifying a basic File type. interface { @@ -1425,6 +1425,21 @@ If S1 and S2 also implement they implement the Lock interface as well as the File interface. +An interface may contain a type name T in place of a method specification. +T must denote another, complete (and not forward-declared) interface type. +Using this notation is equivalent to enumerating the methods of T explicitly +in the interface containing T. + + type ReadWrite interface { + Read, Write (b Buffer) bool; + } + + type File interface { + ReadWrite; // same as enumerating the methods in ReadWrite + Lock; // same as enumerating the methods in Lock + Close(); + } + Forward declaration: A interface type consisting of only the reserved word "interface" may be used in a type declaration; it declares an incomplete interface type (§Type declarations). |