Rumah >pembangunan bahagian belakang >Golang >Bagaimanakah Ungkapan Kaedah Mendayakan Kaedah Melepasi sebagai Argumen dalam Go?

Bagaimanakah Ungkapan Kaedah Mendayakan Kaedah Melepasi sebagai Argumen dalam Go?

Patricia Arquette
Patricia Arquetteasal
2024-11-27 11:26:13681semak imbas

How Do Method Expressions Enable Passing Methods as Arguments in Go?

Ungkapan Kaedah dalam Go

Ungkapan kaedah dalam Go membolehkan anda memanggil kaedah dengan objek tersuai sebagai hujah pertama. Ini boleh berguna apabila anda perlu menghantar tindakan tertentu kepada fungsi.

Memahami Coretan Kod

Pertimbangkan kod Go berikut:

func main() {
    dog := Dog{}
    b := (*Dog).Bark // method expression
    b(&dog, 5)
}

type Dog struct {}

func (d *Dog) Bark(n int) {
    for i := 0; i < n; i++ {
        fmt.Println("Bark")
    }
}

Dalam contoh ini, ungkapan kaedah digunakan untuk menetapkan fungsi kepada pembolehubah b. Ungkapan kaedah (*Anjing).Bark mengaitkan kaedah Bark jenis Anjing dengan penerima penunjuk (*Anjing).

Apabila b dipanggil, kaedah Bark digunakan dengan objek anjing sebagai hujah pertama dan 5 sebagai hujah kedua. Kaedah mencetak "Bark" pada konsol lima kali.

Kelebihan Ungkapan Kaedah

  • Ekspresi kaedah membolehkan anda menghantar tindakan tertentu kepada fungsi, walaupun jika objek tidak diketahui pada masa penyusunan.
  • Mereka menyediakan cara untuk mencipta jenis fungsi tersuai yang boleh digunakan dengan susunan lebih tinggi yang lain fungsi.

Contoh Penggunaan

Ekspresi kaedah boleh digunakan dalam pelbagai situasi. Sebagai contoh, anda boleh mentakrifkan fungsi pembantu yang mengambil ungkapan kaedah dan objek, kemudian melakukan tindakan berdasarkan kaedah:

func DoAction(f func(*Dog, int), d *Dog, n int) {
    f(d, n)
}

...

func main() {
    var b func(*Dog, int)
    if (shouldBark) {
        b = (*Dog).Bark
    } else {
        b = (*Dog).Sit
    }
    d := Dog{}
    DoAction(b, &d, 3)
}

Atas ialah kandungan terperinci Bagaimanakah Ungkapan Kaedah Mendayakan Kaedah Melepasi sebagai Argumen dalam Go?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn