Комментарии 8
func Scale[S ~[]E, E constraints.Integer](s S, c E) S
А кто-то потом говорит что у раста синтаскис токсичный
Не зная Go, мне тут в принципе всю понятно (или мне кажется что все понятно), кроме ~. Два generic типа у функции, у типов ограничения - вроде все ок.
Мне, как джависту, всё понятно, там и не такие дженерики можно увидеть иногда...
Разве что ~
заставляет подумать, но из текста статьи понятно, зачем оно.
Жаль что нельзя использовать структуры в качестве типов.
Можно, проблема в том, как Go интерпретирует ограничения, ограничения - это интерфейсы, а у интерфейсов не может быть полей, только тип и методы. Таким образом, можно ввести ограничение, которое будет задано структурными типами, но нельзя будет обращаться к ним, так как constraint type - это интерфейсный тип, а не структурный. В некотором смысле это даже хорошо, но почему это может быть хорошо нужно писать отдельную статью.
Можно было бы реализовать поддержку полей в интерфейсах по аналогии как это сделано в протоколах Swift. При объявлении поля в интерфейсе, внутри на самом деле объявляются лишь функции get/set. Но для этого я так понимаю нужно полноценное ООП?
Дженерики в Go — подробности из блога разработчиков