单值上下文中的多值

我目前正在尝试 Go 并且遇到了上述错误消息。看看接口,它对 float64 的实现和测试。


界面:


package interval


import (

    "errors"

    "fmt"

    "math"

)


type Interval interface {

    Intersect(Y Interval) (Interval, error) // Intersection of X and Y, error 'nil' when empty

}


type floatInterval struct {

    a, b float64

}


func (fi floatInterval) Intersect(Y Interval) (Interval, error) {

    tmp := Y.(floatInterval)


    a_new, b_new := math.Max(fi.a, tmp.a), math.Min(fi.b, tmp.b)


    result := floatInterval{a_new, b_new}

    if result.Length() == 0 {

        return result, errors.New("Empty interval")

    } else {

        return result, nil

    }

}

测试:


func intersect_test(t *testing.T, c testTuple) {

    got, _ := c.iv1.Intersect(c.iv2).(floatInterval)

    if (c.intersectWant.a != got.a) || (c.intersectWant.b != got.b) {

        t.Errorf("Expected: [%f, %f] \t Got: [%f, %f]", c.intersectWant.a, c.intersectWant.b, got.a, got.b)

    }

}

错误发生在测试函数的第二行。我知道 intersect 返回两个值:间隔和错误值。但由于我将两者都分配给我,got, _ := c.iv1.Intersect(c.iv2).(floatInterval)我认为我是安全的。got, err := ...顺便我也试过。这是由于我正在做的类型转换.(floatInterval)吗?


元芳怎么了
浏览 150回答 1
1回答

慕妹3242003

这是因为类型断言只需要一个值。改为这样做:gotInterval, _ := c.iv1.Intersect(c.iv2)got := gotInterval.(floatInterval)
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go