錆-私を抱きしめる私のdumbness
3960 ワード
私が初めてこのようなコードに遭遇
私はAHAを持っていた!今日と同じように見えたプログラムで作業中です.
その後、何が起こったのか気づいた.だから、私は、実装を終了しました
それは今では明らかに
impl<T> MyTrait for MyStruct<T> {...}
私はなぜ一般的なタイプT
両方の隣に表示するimpl
だけでなくMyStruct
. なかったMyStruct<T>
意図を伝えるのに十分?私はAHAを持っていた!今日と同じように見えたプログラムで作業中です.
struct MyStruct<T> {
x: T
}
trait Bogus {
fn do_nothing(&self);
}
// missed the `impl<T>`
impl Bogus for MyStruct<T> {
fn do_nothing(&self) {
println!("do nothing")
}
}
// somewhere way down in the code
type T = i32;
習慣から、私はタイプパラメタを逃しましたT
隣にimpl
キーワード.コードはまだコンパイルできます.その後、何が起こったのか気づいた.だから、私は、実装を終了しました
Bogus
一般的な特性MyStruct<T>
またはMyStruct<i32>
? あなたが既に推測したかもしれないように、それは後者です.それは今では明らかに
T
隣にimpl
曖昧性解消の目的を果たす.タイプ宣言がすぐに我々の焦点にないので、コンパイラはそれが一般的なタイプであると仮定することができません.// implement Bogus Trait for MyStruct<T> where T could be any type
impl<T> Bogus for MyStruct<T> {
fn do_nothing(&self) {
println!("do nothing")
}
}
// implement Bogus Trait for MyStruct<T> where T is a type declared somewhere
impl Bogus for MyStruct<T> {
fn do_nothing(&self) {
println!("do nothing")
}
}
私は、それが私がとても明白な何かを方向付けるのにそれほど長くかかったように滑稽に感じます!Reference
この問題について(錆-私を抱きしめる私のdumbness), 我々は、より多くの情報をここで見つけました https://dev.to/pintuch/rust-my-dumbness-with-grokking-impl-t-1jabテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol