실험적 슬라이스 패키지의 두 가지 기능인 Contains와 Grow를 고려해 보세요. 두 함수 모두 슬라이스 인수를 허용하지만 서로 다른 유형 제약 조건을 사용합니다.
Contains의 첫 번째 인수에는 []E 유형이 있습니다. 여기서 E는 비교 가능으로 제한됩니다. 이는 E가 비교 가능해야 함을 나타냅니다. . 반면, Grow의 첫 번째 인수에는 ~[]E로 제한되는 S 유형이 있습니다. 이는 S가 E의 일부인 기본 유형을 가져야 함을 나타냅니다.
언뜻 보면 이 두 가지 유형 제약 조건을 사용하는 것 사이에 실질적인 차이가 없는 것처럼 보일 수 있습니다. 그러나 Grow의 인수와 동일한 유형의 슬라이스를 반환해야 하는 경우에는 그렇지 않습니다.
반환해야 하는 경우 입력 인수와 동일한 유형의 슬라이스인 경우, 자체적으로 슬라이스로 제한되는 유형 매개변수를 사용해야 합니다(예: ~[]E). 이를 통해 함수는 인수와 동일한 유형의 값을 반환할 수 있습니다.
Grow의 두 가지 구현을 고려해 보겠습니다.
func Grow[S ~[]E, E any](s S, n int) S // Grow returns a slice of the same type as s func Grow2[E any](s []E, n int) []E // Grow2 returns a slice of type []E
유형의 슬라이스를 반환합니다. , Grow는 동일한 유형의 값을 반환할 수 있지만 Grow2는 그렇지 않습니다. Grow2는 명명되지 않은 슬라이스 유형인 []E.
type ints []int // user-defined slice type ints x := []int{1} // initialize a slice x of type []int x2 := Grow(x, 10) // x2 will be of type []int y := ints{1} // initialize a slice y of type ints y2 := Grow(y, 10) // y2 will be of type ints
유형입니다. 여기서 Grow2(y, 10)은 int 유형의 값을 받지만 []int 유형의 값을 반환합니다. 의도한 동작입니다.
결론적으로 함수 호출에서 인수와 동일한(이름이 지정된) 유형의 슬라이스를 반환해야 하는 경우 자체적으로 슬라이스로 제한되는 유형 매개변수를 사용합니다. (~[]E)가 필요합니다. 그렇지 않으면 요소 유형(E any)만을 제한하는 유형 매개변수를 사용할 수 있습니다.
부인 성명: 제공된 모든 리소스는 부분적으로 인터넷에서 가져온 것입니다. 귀하의 저작권이나 기타 권리 및 이익이 침해된 경우 자세한 이유를 설명하고 저작권 또는 권리 및 이익에 대한 증거를 제공한 후 이메일([email protected])로 보내주십시오. 최대한 빨리 처리해 드리겠습니다.
Copyright© 2022 湘ICP备2022001581号-3