Maison  >  Article  >  développement back-end  >  Comment une fonction appelée dans Go accède-t-elle aux paramètres de la fonction appelante ?

Comment une fonction appelée dans Go accède-t-elle aux paramètres de la fonction appelante ?

PHPz
PHPzavant
2024-02-09 21:15:09470parcourir

Go 中调用的函数如何访问调用函数的参数?

La fonction appelée dans Go peut obtenir les paramètres de la fonction appelante via les paramètres de fonction. Dans Go, les paramètres peuvent être transmis aux fonctions par valeur ou référence, et la fonction peut obtenir la valeur ou le pointeur transmis par l'appelant via les paramètres. Si le paramètre est un type valeur, les opérations à l'intérieur de la fonction seront effectuées sur la copie du paramètre et n'affecteront pas la valeur d'origine transmise par l'appelant. Si le paramètre est de type pointeur, l'opération à l'intérieur de la fonction modifiera la valeur d'origine pointée par le pointeur. De cette manière, les fonctions peuvent accéder et modifier les paramètres de la fonction appelante, permettant ainsi une fonctionnalité plus flexible. Qu'il s'agisse d'un paramètre de type valeur ou de type pointeur, la fonction peut obtenir la valeur ou le pointeur transmis par l'appelant via le paramètre et effectuer les opérations associées à l'intérieur de la fonction.

Contenu de la question

Veuillez vous référer au code de référence https://go.dev/play/p/yig2b6dkcoc (également collé ici) :

Tout comme ce code - l'ordre des arguments n'est pas transmis à la fonction sort.slice(), mais il est bien imprimé dans l'appel à la méthode less() du package de tri.

Quelles sont les propriétés qui permettent cette fonctionnalité ?

package main

import (
    "fmt"
    "sort"
)

func main() {
    order := "abcd"
    s := "bca"
    fmt.Printf("ans: %v\n", customSortString(order, s))
}

func customSortString(order string, s string) string {
    sort.Slice([]byte(s), func(a, b int) bool {
        fmt.Printf("order: %v\n", order) // <------ How does this work? order is not passed to sort.Slice() function. 
        return s[a] < s[b]
    })
    return ""
}

Solution

https://www.php.cn/link/58b7483ba899e0ce4d97ac5eecf6fa99

Les littéraux de fonction sont des closures : ils peuvent référencer des variables définies dans la fonction environnante. Ces variables sont ensuite partagées entre les fonctions environnantes et les littéraux de fonction, et elles persistent tant qu'elles sont accessibles.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer