Under "No parameterized methods"
<https://go.googlesource.com/proposal/+/refs/heads/master/design/go2draft-type-parameters.md#no-parameterized-methods>,
the design document states:
In Go, one of the main roles of methods is to permit types to implement
> interfaces. It is not clear whether it is reasonably possible to permit
> parameterized methods to implement interfaces.
[...]
Or, we could decide that parameterized methods do not, in fact, implement
> interfaces, but then it's much less clear why we need methods at all.
>
Parameterized methods that do not implement interfaces are very useful for
expressibility, especially when it comes to fluent interfaces. The
following is one example:
type Array(type T) []T
func (a Array(A)) Map(type B)(fn func(A) B) Array(B) {
b := make([]B, len(a))
for i := range a {
b[i] = fn(a[i])
}
return b
}
func F() int {
return Array(int){...}.
Map(func(v int) int { return v*v }).
Filter(func(v int) bool { return v%2 == 0 }).
Sum(func(a, b int) int { return a+b })
}
For a larger example, see:
https://gitlab.com/firelizzard/go-iter/-/blob/generic-methods/fluent/map.go2
--
You received this message because you are subscribed to the Google Groups
"golang-nuts" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
To view this discussion on the web visit
https://groups.google.com/d/msgid/golang-nuts/29775a0d-bef7-4a5e-8ca8-83c8a7551658o%40googlegroups.com.