in func do(i interface{}) interface{} (return i), do says nothing because
"interface{} says nothing",
from the caller pov, it looses information at the return call,
var x = "o"
do(x) // <- return lost the track it was a string
if you delegate that func to another func,
it can t says anything else rather than nothing unless it introduces type
assertion.
func to(do func(interface{})interface{}) func (interface{}) interface{} {
return func (i interface{}) interface{} {return do(i)} }
if the observation become "interface{} destroys information",
does it make sense to consider a "value type of any type that carries out
its input type" ?
func do(any <t>) <t> {return any}
do("thing") <- this is explicitly string
Acting the same way as interface, except that little thing about
destroying/preserving an information.
It can be delegated to func that works on anything, still returns concrete
types.
func to(do func(*<t>*)<t>) func (<t>) *<t>* { return func (i <t>) <t>
{return do(i)} }
to(do)("whatever") // got a string, right ?
One step forward,
what if <t> might be able to say "any type with a constraint on that
interface",
func do(any <t:Stringer>) <t> {return any}
do(WhateverStringerCapable{}) <- much like using a regular parameter of
type Stringer/interface{}, but now the return call reflects the invoke call
, so its more complete than interface{}/Stringer.
no?
Or maybe there is a reason in destroying that information ?
--
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 [email protected].
For more options, visit https://groups.google.com/d/optout.