Bez popisu

type_inference.go 1.1KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061
  1. // MAP OMIT
  2. func Map[F, T any](s []F, f func(F) T) []T { ... }
  3. // MAP OMIT
  4. // MAP CALL OMIT
  5. var s []int
  6. f := func(i int) int64 { return int64(i) }
  7. var r []int64
  8. // Specify both type arguments explicitly.
  9. r = Map[int, int64](s, f)
  10. // Specify just the first type argument, for F,
  11. // and let T be inferred.
  12. r = Map[int](s, f)
  13. // Don't specify any type arguments, and let both be inferred.
  14. r = Map(s, f)
  15. // MAP CALL OMIT
  16. // ERR OMIT
  17. func Double[T interface{ ~int }](v T) T {
  18. return v * 2
  19. }
  20. Double(1) //
  21. // ERR OMIT
  22. // CANNOT INFERENCE OMIT
  23. func NewValue[T any]()T {
  24. var t T
  25. return t
  26. }
  27. println(NewValue()) // cannot infer T
  28. // CANNOT INFERENCE OMIT
  29. // MAP2 OMIT
  30. // Map calls the function f on every element of the slice s,
  31. // returning a new slice of the results.
  32. func Map[F, T any](s []F, f func(F) T) []T {
  33. r := make([]T, len(s))
  34. for i, v := range s {
  35. r[i] = f(v)
  36. }
  37. return r
  38. }
  39. strs := Map([]int{1, 2, 3}, strconv.Itoa)
  40. // MAP2 OMIT
  41. // PAIR OMIT
  42. // NewPair returns a pair of values of the same type.
  43. func NewPair[F any](f1, f2 F) *Pair[F] { ... }
  44. // PAIR OMIT