슬라이스 유형
저는 현재 훌륭한 Tour of 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
}
유형이 있는 make
문을 uint8
두 번 사용해야하는 이유를 이해하지 못합니다 (스 니펫의 주석 참조). 중복되는 것처럼 보이지만 다른 방법으로 수행하는 방법을 알 수 없습니다.
Go에서이 작업을 수행하는 다른 방법은 없습니다.
예, 장황하지만 필요하다는 데 동의합니다. 두 번째 make () 문은 첫 번째 문과 완전히 독립적입니다. 컴파일러가에서 유형을 추론 할 수 있어야한다고 주장 할 수 pic[i]
있지만이 시점에서는 그렇지 않습니다.
또 다른 요점 : 두 번째 경우에서 유형을 생략하면 make () 문이 어떻게 보일까요? 실제 할당을 수행하고 필요한 len / capacity를 지정할 수 있으려면 make ()가 여전히 필요합니다.
참고로 슬라이스 길이를 혼합했습니다. 운동은 최상위 조각은 길이가 있어야 명시 dy
하지, dx
당신은 당신의 코드에 넣어.
명확하게하기 위해 괄호를 사용하여 다음 [][]uint8
과 같이 다시 작성할 수 있습니다 []([]uint8)
. a slice of (slices of type uint8
).
은 Using 메이크업 유형의 슬라이스를 들어, 내장 기능 T
, make(T, n)
유형의 슬라이스 반환 T
길이 n
와 용량을 n
.
따라서 make([][]uint8, 2)
는와 동일 make([]([]uint8), 2)
하며 길이와 용량이 2
인 슬라이스 유형의 슬라이스를 반환합니다 uint8
. 여기서 유형의 각 슬라이스 uint8
는 0 값 ( nil
길이와 용량이 0 인 참조)으로 초기화됩니다 .
다차원 슬라이스는 들쭉날쭉하고 다차원 들쭉날쭉 한 배열 과 유사 합니다 .
예를 들면
package main
import "fmt"
func main() {
ss := make([][]uint8, 2) // ss is []([]uint8)
fmt.Printf("ss: %T %v %d\n", ss, ss, len(ss))
for i, s := range ss { // s is []uint8
fmt.Printf("ss[%d]: %T %v %d\n", i, s, s, len(s))
}
}
산출:
ss: [][]uint8 [[] []] 2
ss[0]: []uint8 [] 0
ss[1]: []uint8 [] 0
참고 URL : https://stackoverflow.com/questions/7703251/slice-of-slices-types
'Development Tip' 카테고리의 다른 글
ElementTree 예제를 사용하여 Python에서 XML 구문 분석 (0) | 2020.11.28 |
---|---|
의존성 주입의 맥락에서 컴포지션 루트는 무엇입니까 (0) | 2020.11.28 |
선택 가능 (0) | 2020.11.28 |
Perl 5.20과 스마트 매칭의 운명은 언제인가? (0) | 2020.11.28 |
디버깅을 위해 travis-ci 빌드 환경을 재현하는 방법 (0) | 2020.11.28 |