Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bagaimana untuk menukar int kepada jenis generik yang mengandungi complex128 dalam Go?

Bagaimana untuk menukar int kepada jenis generik yang mengandungi complex128 dalam Go?

王林
王林ke hadapan
2024-02-09 11:54:101224semak imbas

Bagaimana untuk menukar int kepada jenis generik yang mengandungi complex128 dalam Go?

Editor php Xiaoxin akan memperkenalkan kepada anda cara menukar int kepada jenis generik yang mengandungi complex128 dalam bahasa Go. Dalam bahasa Go, kita boleh menggunakan penegasan jenis untuk mencapai penukaran ini. Penegasan jenis ialah cara untuk menyemak jenis nilai antara muka Sintaksnya ialah val.(Jenis), dengan val ialah nilai antara muka dan Jenis ialah jenis yang ditegaskan. Dengan menggunakan penegasan jenis, kita boleh menukar nilai jenis int kepada nilai generik jenis kompleks128 untuk mencapai kefungsian penukaran yang diingini. Seterusnya, kami akan memperkenalkan kaedah pelaksanaan khusus secara terperinci.

Kandungan soalan

Saya tidak tahu cara untuk menukar int 转换为包含 complex128 的通用类型。下面是一个示例,除非注释掉 complex128 atau ia tidak akan disusun:

package main

import "fmt"

type val interface {
    int64 | float64 | complex128
}

func f[V val](a, b V) (c V) {
    q := calc()
    return a * b * V(q)
}

func calc() int {
    // lengthy calculation that returns an int
    return 1
}

func main() {
    fmt.Printf("%v\n", f(int64(1), int64(2)))
}

Ini dipermudahkan daripada pengiraan yang lebih besar. Saya telah cuba menggunakan suis, tetapi setiap sintaks yang saya cuba nampaknya menghadapi rintangan dari satu jenis atau yang lain.

Bagaimana untuk mendarab ab dengan integer?

Saya cuba menggunakan suis yang mengembalikan jenis pembolehubah, seperti any(c).(type) 但例如如果我有 case complex128: 那么它拒绝允许 complex 内置,因为它不允许返回 v.

Di atas akan disusun tanpa complex128. complex128 上面的内容将编译。

解决方法

这个可以工作,但需要列出 switch

Penyelesaian🎜🎜Ini berfungsi, tetapi memerlukan penyenaraian setiap jenis dalam pernyataan suis: 🎜
func f[V val](a, b V) (c V) {
    q := calc()

    var temp any
    switch any(c).(type) {
    case complex128:
        temp = complex(float64(q), 0)
    case int64:
        temp = int64(q)
    default:
        temp = float64(q)
    }
    return a * b * (temp.(V))
}

Atas ialah kandungan terperinci Bagaimana untuk menukar int kepada jenis generik yang mengandungi complex128 dalam Go?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Artikel ini dikembalikan pada:stackoverflow.com. Jika ada pelanggaran, sila hubungi admin@php.cn Padam