S
Size: a a a
S
EG
EG
trait Foo {
fn takes_ref(&self);
fn takes_val(self);
}
EG
<T: Foo> where &T: Bar
тоже выразить нельзя, у тебя нет возможности дописать констрейнтыKR
KR
<T: Foo> where &T: Bar
тоже выразить нельзя, у тебя нет возможности дописать констрейнтыEG
KR
EG
[]T
, а вызывать интерфейсные функции на *T
, то это не сработаетEG
T MyInterface
, но это неправда — интерфейс реализован на *T
EG
T
сразу указатель, но это тоже неправда, так ты не получишь слайсEG
type Foo interface {
Bar()
}
type S struct{}
func (s *S) Bar() {}
func takesFoo[T Foo](vals []T) {
for _, val := range vals {
val.Bar()
}
}
func main() {
var baz []S
takesFoo[S](baz) // Нет, S не имплементирует Bar
takesFoo[*S](baz) // Нет, baz это []S, а не []*S
}
KR
KR
KR
.iter()
и .into_iter()
EG
KR
.map(Into::into).collect()
KR
ΑZ
S