Глядя на документации для golang's 2D slices и не может понять синтаксис, используемый в предыдущем примере:Как эта «общая идиома» действительно работает?
func main() {
XSize := 5
YSize := 5
// Allocate the top-level slice, the same as before.
picture := make([][]uint8, YSize) // One row per unit of y.
// Allocate one large slice to hold all the pixels.
pixels := make([]uint8, XSize*YSize) // Has type []uint8 even though picture is [][]uint8.
// Loop over the rows, slicing each row from the front of the remaining pixe ls slice.
for i := range picture {
picture[i], pixels = pixels[:XSize], pixels[XSize:]
}
}
Я нашел change request где это было добавлен к документации и изменение автора этого нормальному/легко понять код:
// Loop over the rows, slicing each row.
for i := range picture {
picture[i] = pixels[i*XSize:(i+1)*XSize]
Однако есть следующий комментарий:
отлично. еще одна общая идиома, чтобы избежать математику:
picture[i], pixels = pixels[:XSize], pixels[XSize:]
Мой вопрос, как же выше достичь такой же, как «избежать математике» метод? Некоторые документы о том, что происходит, были бы замечательными.
Awe right. Полностью имеет смысл.'(picture [i], pixels) = (пиксели [: XSize], пиксели [XSize:])'. Просто не видел этого. – Jonathan