Rumah >pembangunan bahagian belakang >Golang >Bagaimana untuk Menyelesaikan Ralat 'Jenis Rekursif Tidak Sah' dalam Definisi Go Struct?

Bagaimana untuk Menyelesaikan Ralat 'Jenis Rekursif Tidak Sah' dalam Definisi Go Struct?

DDD
DDDasal
2024-12-31 01:31:09156semak imbas

How to Resolve

Menyelesaikan "Jenis Rekursif Tidak Sah" dalam Go Struct untuk Pelaksanaan Jurubahasa

Dalam Go, apabila cuba mentakrifkan struct dengan jenis rekursif, seperti struct Persekitaran dengan medan induk yang merujuk jenisnya sendiri, anda mungkin menghadapi ralat "jenis rekursif tidak sah." Begini cara untuk menyelesaikan isu ini dan memahami sebab asas:

Jenis dan Penunjuk Rekursif

Dalam Go, struct yang merujuk jenisnya sendiri secara langsung akan mengakibatkan pengkompil tidak dapat menentukan saiz daripada struct. Untuk menyelesaikan isu ini, kita perlu menggunakan penuding kepada struct dan bukannya terus memasukkan struct.

Struktur Persekitaran Diubahsuai

Versi struct Persekitaran yang diperbetulkan berikut menggunakan penunjuk kepada induknya medan:

type Environment struct {
    parent *Environment // note that this is now a pointer
    symbol string
    value  RCFAEValue
}

Dengan menggunakan penunjuk, kami membenarkan pengkompil menentukan saiz struct sejak saiz penunjuk dipratentukan.

Penciptaan Alam Sekitar

Apabila mencipta Persekitaran baharu, kita perlu menghantar penunjuk kepada persekitaran induk dan bukannya persekitaran itu sendiri:

Environment{&fun_Val.ds, fun_Val.param, exp.arg_exp.interp(env)}

Ini memastikan bahawa kami menggunakan jenis yang betul dan bahawa struct itu sah.

Atas ialah kandungan terperinci Bagaimana untuk Menyelesaikan Ralat 'Jenis Rekursif Tidak Sah' dalam Definisi Go Struct?. 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