Jenis Terkekang sebagai Argumen Fungsi dalam Go 1.18 Generik
Generik Go 1.18 menawarkan kekangan jenis yang berkuasa, membenarkan pembangun mentakrifkan jenis tersuai dengan tingkah laku tertentu. Walau bagaimanapun, menggunakan jenis terkekang ini sebagai hujah kepada fungsi yang mengharapkan jenis konkrit boleh membawa kepada ralat penyusunan.
Masalah:
Pertimbangkan contoh yang diberikan, di mana struct Charmander ditakrifkan sebagai jenis generik dengan parameter jenis F. Apabila cuba menggunakan kuasa serangan Charmander untuk menyebabkan kerosakan menggunakan kaedah InflictDamage, pengkompil menimbulkan ralat.
Mesej Ralat:
cannot use c.AttackPower (variable of type float64 constrained by Float) as float64 value in argument to other.ReceiveDamage compiler(IncompatibleAssign)
Ralat ini berlaku kerana kaedah InflictDamage menjangkakan hujah float64, tetapi pembolehubah AttackPower adalah daripada jenis terkekang, F.
Penyelesaian:
Untuk menyelesaikan ralat ini, perlu menggunakan penukaran jenis. Jenis F yang dikekang boleh ditukar kepada float64 dengan menghantar nilainya secara eksplisit, seperti yang ditunjukkan dalam kod yang disemak:
func (c *Charmander[T]) ReceiveDamage(damage float64) { c.Health -= T(damage) } func (c *Charmander[T]) InflictDamage(other Pokemon) { other.ReceiveDamage(float64(c.AttackPower)) }
Penukaran ini sah kerana float64 serasi dengan float32 dan float64, jenis yang dibenarkan oleh jenis parameter F. Adalah penting untuk ambil perhatian bahawa menghantar F secara eksplisit kepada float64 boleh mengakibatkan kehilangan ketepatan jika F digunakan dengan float32.
Atas ialah kandungan terperinci Berikut ialah beberapa tajuk berasaskan soalan yang sesuai dengan kandungan artikel: * Cara Menggunakan Jenis Terkekang sebagai Argumen Fungsi dalam Go 1.18 Generik: Ini adalah tajuk langsung dan bermaklumat yang menyerlahkan ke. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!