错误 - 无法使用 r.x(int 类型的变量)作为 return 语句中的分子值

问题描述 投票:0回答:1

在下面的代码中:

package main

type RationalNumber struct {
    x int
    y int
}

type Numerator int
type Denominator int

// Constructor
func newRational(n, d int) RationalNumber {
    g := gcd(n, d)
    return RationalNumber{
        x: n / g,
        y: d / g,
    }
}

// Selector
func (r RationalNumber) numer() Numerator {
    return r.x
}

func (r RationalNumber) denom() Denominator {
    return r.y
}

func main() {

}

func gcd(a int, b int) int { // (15, 21) (-15, 21) (15, -21) (-15, -21)

    var f func(int, int) int
    f = func(x int, y int) int {
        if x%y == 0 {
            return y
        }
        return gcd(y, x%y)
    }
    if mod(a) < mod(b) {
        return f(mod(b), mod(a))
    }
    return f(mod(a), mod(b))
}

func mod(x int) int { // helper
    if x < 0 {
        return -x
    }
    return x
}

标识符

Numerator
的底层类型是
int
r.x
属于类型
int

那么,为什么

return r.x
会出错呢?
cannot use r.x (variable of type int) as Numerator value in return statement

go
1个回答
0
投票

那么,为什么 return r.x 会出错呢?不能使用 r.x(int 类型的变量)作为 return 语句中的分子值

因为虽然底层类型相同,但类型不同。返回时只需转换为底层类型:

return r.x.(Numerator)
© www.soinside.com 2019 - 2024. All rights reserved.