use std::fmt::Display;
fn label(flag: bool) -> impl Display {
if flag { 1 } else { "one" }
}
fn main() {
println!("{}", label(true));
}Bu kod derlendiğinde ne olur?
- aDerlenir ve
1basar; her dalDisplay'e karşı kendi başına denetlenir. - bE0308:
ifveelsedalları, gizli tip için uyumsuz tipler taşır.✓ - cE0277:
&strDisplayimplemente etmez, yalnız1dalı geçerlidir. - dDerlenir ve
onebasar; son ifade somut tipi sabitler.
Açıklama:Dönüş konumundaki
impl Trait, fonksiyon gövdesinin seçtiği tek bir somut tipin opak takma adıdır. Burada bir dal i32, diğeri &str üretir; derleyici E0308 (if ve else uyumsuz tipler) verir. İki tip de Display implemente ettiğinden E0277 söz konusu değildir. Aynı arayüz arkasında farklı tipler döndürmek için Box<dyn Display> gerekir ve her dal kutulanır.