Por que uma função em um objeto de característica não pode ser chamada quando delimitada com `Self: Sized`?
Eu tenho o seguinte código:
trait Bar {
fn baz(&self, arg: impl AsRef<str>) where Self: Sized;
}
struct Foo;
impl Bar for Foo {
fn baz(&self, arg: impl AsRef<str>) {}
}
fn main() {
let boxed: Box<dyn Bar> = Box::new(Foo);
boxed.baz();
}
O que resulta neste erro:
error: the `baz` method cannot be invoked on a trait object
--> src/main.rs:13:11
|
13 | boxed.baz();
| ^^^
Por que isso não é possível? Está funcionando ao remover oSelf: Sized
vinculado, no entanto, não posso usar genéricos, o que é bastante confortável para o chamador.
Isto énão uma duplicata dePor que um método genérico dentro de uma característica exige que o objeto seja dimensionado?. Esta pergunta é sobre por que você não pode ligarbaz
de um objeto de característica. Eu estounão perguntando, por que o limite é necessário. Isso já foidiscutido.