一尘不染

切片类型

go

我目前正在努力完成出色的“围棋之旅”。我使用以下解决方案完成了其中一项练习(#45):

func Pic(dx, dy int) [][]uint8 {
    pic := make([][]uint8, dy) /* type declaration */
    for i := range pic {
        pic[i] = make([]uint8, dx) /* again the type? */
        for j := range pic[i] {
            pic[i][j] = uint8((i+j)/2)
        }
    }
    return pic
}

我不明白为什么我必须使用两次makeuint8类型的语句(请参见摘要中的注释)。这似乎是多余的,但我不知道该怎么做。


阅读 196

收藏
2020-07-02

共1个答案

一尘不染

Go中没有其他方法可以做到这一点。

是的,我同意这很冗长,但有必要。第二个make()语句完全独立于第一个。可以争论的是,编译器应该能够从推断类型pic[i],但此时还不行。

另一点:如果在第二种情况下省略了类型,make()语句的外观如何?仍然需要make()来进行实际分配并能够指定所需的len / capacity。

附带说明,您混合了切片长度。练习指出,顶层切片应具有length dy,而不是dx您在代码中输入的长度。

2020-07-02