Ich versuche, Beispiele für Konstruktorfunktionen in Merkmalen zu finden, hatte aber nicht viel Glück. Ist das eine idiomatische Sache in Rust?Ist es möglich, eine Konstruktorfunktion in einem Merkmal zu haben?
trait A {
fn new() -> A;
}
struct B;
impl A for B {
fn new() -> B {
B
}
}
fn main() {
println!("message")
}
<anon>:7:8: 9:9 error: method `new` has an incompatible type for trait: expected trait A, found struct `B` [E0053]
<anon>:7 fn new() -> B {
<anon>:8 B
<anon>:9 }
<anon>:7:8: 9:9 help: see the detailed explanation for E0053
error: aborting due to previous error
playpen: application terminated with error code 101
dieses Casting gibt einen Kern :: Marker :: Sized ähnliche Fehler.
trait A {
fn new() -> A;
}
struct B;
impl A for B {
fn new() -> A {
B as A
}
}
fn main() {
println!("message")
}
<anon>:8:10: 8:16 error: cast to unsized type: `B` as `A`
<anon>:8 B as A
^~~~~~
<anon>:8:10: 8:11 help: consider using a box or reference as appropriate
<anon>:8 B as A
^
<anon>:7:20: 7:21 error: the trait `core::marker::Sized` is not implemented for the type `A + 'static` [E0277]
<anon>:7 fn new() -> A {
^
<anon>:7:20: 7:21 note: `A + 'static` does not have a constant size known at compile-time
<anon>:7 fn new() -> A {
^
error: aborting due to 2 previous errors
playpen: application terminated with error code 101
Nicht ganz sicher, was Sie suchen, aber ändert Ihre zweite Zeile zu 'fn new() -> Self;' tun, was Sie wollen? – fjh
Ja. Es funktioniert in der Tat. Und es macht was ich wollte. Könnten Sie bitte antworten und ich werde es akzeptieren? – 6D65
Bitte beachten Sie, dass die Rust-Stil 4-Raum-Eindruck ist. – Shepmaster