On Tue, Jan 22, 2019 at 11:47 PM <mountain...@gmail.com> wrote:
>
> i got :
>   # command-line-arguments
> ./key.go:6:18: invalid operation: F() == F() (func can only be compared to 
> nil)

Yes, that is what the language spec says and it is what I said: in Go,
function values are not comparable.

I wrote that code as an example to help explain why function values
are not comparable.

Ian

> 在 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.

-- 
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