• [^] # Re: Trou de mémoire

    Posté par . En réponse au lien Go 1.18 Beta : la généricité enfin !. Évalué à 2.

    Je ne vois pas de fermeture dans l'exemple que tu donnes par contre ?

    type MyFloat float64
    func (f MyFloat) Abs() float64 {
     if f < 0 {
     return float64(-f)
     }
     return float64(f)
    }
    type Vertex struct {
     X, Y float64
    }
    func (v *Vertex) Abs() float64 {
     return math.Sqrt(v.X*v.X + v.Y*v.Y)
    }

    Dans la première méthode Asb() f est capturé et v dans la seconde. C'est comme ça que le l'ai compris, même si je ne suis pas certains qu'on puisse parler de capture pour une référence qui est passée de cette façon à la méthode (comme le self de python).

    L'intérêt des fermetures est de faire en sorte que l'algo central ne dépende d'aucun type particulier, même pas un type générique mais de la plus petite interface possible, par exemple func(i, j int) bool. Le code dépendant du type est dans la fonction avec fermeture et propre à chaque utilisation et donc en dehors de la lib.

    Ça n'est pas clair pour moi. Tu semble parlait indistinctement de fermeture et d'interface.

    // une interface 
    type Rendu interface {
     Rendu(i, j int) bool
    }
    // une lambda
    var rendu func(i, j int) bool

    Les 2 manières peuvent faire de la capture pour calculer leur rendu comme tu le souhaite.

    https://linuxfr.org/users/barmic/journaux/y-en-a-marre-de-ce-gros-troll