Bolehkah anda Lulus Panggilan Fungsi sebagai Argumen dalam Go?

Linda Hamilton
Lepaskan: 2024-10-29 15:43:02
asal
1086 orang telah melayarinya

Can you Pass Function Calls as Arguments in Go?

Mencapai Gelagat Seperti Panggilan Fungsi dalam Go

Dalam Go, kata kunci seperti go dan defer mengharapkan fungsi diluluskan sebagai parameter. Walau bagaimanapun, terdapat had yang menghalang penghantaran panggilan fungsi sebenar.

Jawapan:

Malangnya, tiada jenis langsung yang membenarkan anda meniru panggilan fungsi sebagai argumen. go and defer ialah binaan sintaksis yang disokong oleh spesifikasi bahasa dan pengkompil menguatkuasakan tingkah laku ini.

Pendekatan Alternatif: Menggunakan Nilai Fungsi

Untuk memintas pengehadan ini, anda boleh menggunakan nilai fungsi. Nilai fungsi ialah pembolehubah atau nilai fungsi jenis. Anda boleh memanggil nilai fungsi kemudian atau pada bila-bila masa ia diperlukan.

<code class="go">func myFunc() {
    fmt.Println("hi")
}

func main() {
    var f func()
    f = myFunc
    f() // This calls the function value stored in f, which is myFunc in this case
}</code>
Salin selepas log masuk

Meniru Penjimatan Parameter Automatik

Dalam ulasan, anda menyebut keinginan untuk penjimatan parameter automatik . Begini cara anda boleh mencapai ini menggunakan fungsi pembantu yang menyediakan fungsi yang dibungkus dengan parameter yang disimpan:

<code class="go">func wrapPrintln(s string) func() {
    return func() {
        fmt.Println(s)
    }
}

func launch(f func()) {
    fmt.Println("Before launch")
    go func() {
        defer fmt.Println("After completion")
        f()
    }()
}

func main() {
    s := "Hello, playground"
    launch(wrapPrintln(s))
}</code>
Salin selepas log masuk

Refleksi sebagai Pilihan

Refleksi ialah pendekatan lain untuk dikendalikan senario ini, tetapi ia melibatkan penghantaran fungsi sebagai antara muka dan menggunakan pantulan untuk memanggilnya. Pendekatan ini kurang cekap daripada menggunakan nilai fungsi tetapi membenarkan pengendalian fungsi dengan tandatangan yang berbeza-beza.

Kesimpulannya, walaupun tidak ada cara langsung untuk menghantar panggilan fungsi sebagai argumen, menggunakan nilai fungsi atau meniru penjimatan parameter melalui pembantu fungsi menyediakan penyelesaian untuk mencapai gelagat yang serupa.

Atas ialah kandungan terperinci Bolehkah anda Lulus Panggilan Fungsi sebagai Argumen dalam Go?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan