Rumah >pembangunan bahagian belakang >Golang >Bagaimana Anda Boleh Mencapai Aplikasi Separa dan Fungsi Kari dalam Go?

Bagaimana Anda Boleh Mencapai Aplikasi Separa dan Fungsi Kari dalam Go?

Patricia Arquette
Patricia Arquetteasal
2024-11-08 10:39:02387semak imbas

How Can You Achieve Partial Application and Function Currying in Go?

Kari dalam Go

Dalam pengaturcaraan berfungsi, kari ialah teknik untuk mengubah fungsi yang mengambil berbilang argumen menjadi satu siri fungsi bersarang yang setiap satunya mengambil satu argumen. Ini membenarkan aplikasi separa, di mana fungsi boleh digunakan pada subset argumennya untuk menghasilkan fungsi baharu yang mengambil argumen yang tinggal.

Aplikasi Separa dalam Go

Aplikasi separa tidak secara langsung disokong dalam Go, tetapi ia boleh dicapai menggunakan penutupan. Penutupan ialah fungsi yang mengekalkan akses kepada pembolehubah skop yang disertakan walaupun selepas skop telah keluar. Dengan mengembalikan penutupan daripada fungsi, kita boleh mencipta fungsi yang digunakan separa.

Sebagai contoh, fungsi berikut mengembalikan penutupan yang menambahkan nombor tertentu pada inputnya:

func add(a int) func(b int) int {
    return func(b int) int {
        return a + b
    }
}

Kami kemudian boleh menggunakan penutupan ini untuk menggunakan sebahagian fungsi tambah:

add2 := add(2)
fmt.Println(add2(3)) // prints 5

Fungsi Currying in Go

Fungsi karipap juga boleh dicapai dalam Go menggunakan penutupan. Fungsi berikut mengurut fungsi yang mengambil berbilang argumen:

func curry(f func(...int) int) func(int) func(...int) int {
    return func(a int) func(...int) int {
        return func(b... int) int {
            args := append([]int{a}, b...)
            return f(args...)
        }
    }
}

Fungsi ini mengembalikan fungsi yang mengambil satu argumen dan mengembalikan fungsi baharu yang mengambil argumen yang tinggal. Kita kemudiannya boleh menggunakan fungsi ini untuk mengari mana-mana fungsi:

add := curry(func(a, b, c int) int { return a + b + c })
add2 := add(2)
add3 := add3(3)
fmt.Println(add3(4)) // prints 9

Kesimpulan

Walaupun Go tidak menyokong aplikasi separa atau fungsi kari secara asli, teknik ini boleh dicapai menggunakan penutupan. Ini membolehkan pengaturcara Go memanfaatkan konsep pengaturcaraan berfungsi bagi aplikasi separa dan kari, walaupun bahasa itu sendiri tidak memberikan sokongan langsung untuk mereka.

Atas ialah kandungan terperinci Bagaimana Anda Boleh Mencapai Aplikasi Separa dan Fungsi Kari 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