Rust'ta (sürüm 1.0) jeneriklerle ilgili yeni bir sorum var.Genel bir türe dökme
Bölünme yapmak için genel bir işlev yazdığımı varsayalım. Böyle bir işlevin yararlılığını boş vermeyin; Bu soruyu basit tutmak için basit bir işlev.
fn divide<T: std::ops::Div>(a: T, b: T) -> T {
a/b
}
fn main() {
println!("{}", divide(42, 18))
}
Bu program derlenemiyor.
src/main.rs:2:5: 2:10 error: mismatched types:
expected `T`,
found `<T as core::ops::Div>::Output`
(expected type parameter,
found associated type) [E0308]
src/main.rs:2 a/b
^~~~~
Ben derleyici hata Bölme işleminin sonucu Output
değil T
tip olduğunu bana söylediğini anlıyorum ve standard library documentation içinde Output
türünü görmek.
Output
- T
nasıl dönüştürülür? Yayınlamak için as
kullanmayı denerim.
fn divide<T: std::ops::Div>(a: T, b: T) -> T {
(a/b) as T
}
fn main() {
println!("{}", divide(42, 18))
}
Bu, farklı bir derleyici hatasına neden olur.
src/main.rs:2:5: 2:17 error: non-scalar cast: `<T as core::ops::Div>::Output` as `T`
src/main.rs:2 (a/b) as T
^~~~~~~~~~~~
Ben bu işi yapmak için fikir gelmiyor ve ben burada dil hakkında temel bir şeyin anlayış eksikliği farkındayım ama ben bile bu işi yapmak için aramaya bilmiyorum. Yardım et? Eğer İÇİNDE olduğunuz zaman fonksiyonu
iç döküm yapamaz nedeniyle ilgili daha fazla açıklama eklemek için
fn divide<T: std::ops::Div>(a: T, b: T) -> T::Output {
a/b
}
Düzenleme:
Muhtemelen bir http://stackoverflow.com/q/29184358/155423 kopyası. – Shepmaster