exec code:
package main

import "fmt"

func main() {
    fmt.Println(F() == F())
}

func F() func() int {
    i := 0
    return func() int {
        i++
        return i
    }
}


i got :
  # command-line-arguments
./key.go:6:18: invalid operation: F() == F() (func can only be compared to 
nil)


在 2019年1月23日星期三 UTC+8上午11:59:07,mount...@gmail.com写道:
>
>      When i use the func, map slice as the key of map, it isn't work! 
>      So  I lookup source  why, i find 
>
>     // spec: "The comparison operators == and != must be fully defined
>         // for operands of the key type; thus the key type must not be a
>         // function, map, or slice."
>         //
>         // Delay this check because it requires fully setup types;
>         // it is safe to continue in any case (was issue 6667).
>         check.later(func() {
>             if !Comparable(typ.key) {
>                 check.errorf(e.Key.Pos(), "invalid map key type %s", 
> typ.key)
>             }
>         })
> // Comparable reports whether values of type T are comparable.
> func Comparable(T Type) bool {
>     switch t := T.Underlying().(type) {
>     case *Basic:
>         // assume invalid types to be comparable
>         // to avoid follow-up errors
>         return t.kind != UntypedNil
>     case *Pointer, *Interface, *Chan:
>         return true
>     case *Struct:
>         for _, f := range t.fields {
>             if !Comparable(f.typ) {
>                 return false
>             }
>         }
>         return true
>     case *Array:
>         return Comparable(t.elem)
>     }
>     return false
> }
>

-- 
You received this message because you are subscribed to the Google Groups 
"golang-nuts" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to golang-nuts+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to