impl Trait
ΠΠΎΠ΄ΡΠ±Π½ΠΎ Π΄ΠΎ ΠΌΠ΅ΠΆ ΡΡΠ΅ΠΉΡΡΠ², ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡ impl Trait
ΠΌΠΎΠΆΠ½Π° Π²ΠΈΠΊΠΎΡΠΈΡΡΠΎΠ²ΡΠ²Π°ΡΠΈ Π² Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠ°Ρ
ΡΡΠ½ΠΊΡΡΡ ΡΠ° Π·Π½Π°ΡΠ΅Π½Π½ΡΡ
, ΡΠΎ ΠΏΠΎΠ²Π΅ΡΡΠ°ΡΡΡΡΡ:
// Π‘ΠΈΠ½ΡΠ°ΠΊΡΠΈΡΠ½ΠΈΠΉ ΡΡΠΊΠΎΡ Π΄Π»Ρ: // fn add_42_millions<T: Into<i32>>(x: T) -> i32 { fn add_42_millions(x: impl Into<i32>) -> i32 { x.into() + 42_000_000 } fn pair_of(x: u32) -> impl std::fmt::Debug { (x + 1, x - 1) } fn main() { let many = add_42_millions(42_i8); println!("{many}"); let many_more = add_42_millions(10_000_000); println!("{many_more}"); let debuggable = pair_of(27); println!("debuggable: {debuggable:?}"); }
impl Trait
Π΄ΠΎΠ·Π²ΠΎΠ»ΡΡ ΠΏΡΠ°ΡΡΠ²Π°ΡΠΈ Π· ΡΠΈΠΏΠ°ΠΌΠΈ, ΡΠΊΡ Π²ΠΈ Π½Π΅ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π½Π°Π·Π²Π°ΡΠΈ. ΠΠ½Π°ΡΠ΅Π½Π½Ρ impl Trait
Π΄Π΅ΡΠΎ Π²ΡΠ΄ΡΡΠ·Π½ΡΡΡΡΡΡ Ρ ΡΡΠ·Π½ΠΈΡ
ΠΏΠΎΠ·ΠΈΡΡΡΡ
.
-
Π£ Π²ΠΈΠΏΠ°Π΄ΠΊΡ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ°,
impl Trait
- ΡΠ΅ ΡΠΊ Π°Π½ΠΎΠ½ΡΠΌΠ½ΠΈΠΉ Π·Π°Π³Π°Π»ΡΠ½ΠΈΠΉ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡp Π· ΠΎΠ±ΠΌΠ΅ΠΆΠ΅Π½Π½ΡΠΌ ΡΡΠ΅ΠΉΡΡ. -
ΠΠ»Ρ ΡΠΈΠΏΡ, ΡΠΎ ΠΏΠΎΠ²Π΅ΡΡΠ°ΡΡΡΡΡ, ΡΠ΅ ΠΎΠ·Π½Π°ΡΠ°Ρ, ΡΠΎ ΡΠΈΠΏ, ΡΠΎ ΠΏΠΎΠ²Π΅ΡΡΠ°ΡΡΡΡΡ, Ρ Π΄Π΅ΡΠΊΠΈΠΌ ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΠΈΠΌ ΡΠΈΠΏΠΎΠΌ, ΡΠΊΠΈΠΉ ΡΠ΅Π°Π»ΡΠ·ΡΡ ΡΡΠ΅ΠΉΡ, Π±Π΅Π· Π½Π°Π·Π²ΠΈ ΡΠΈΠΏΡ. Π¦Π΅ ΠΌΠΎΠΆΠ΅ Π±ΡΡΠΈ ΠΊΠΎΡΠΈΡΠ½ΠΎ, ΠΊΠΎΠ»ΠΈ Π²ΠΈ Π½Π΅ Ρ ΠΎΡΠ΅ΡΠ΅ Π²ΠΈΠΊΡΠΈΠ²Π°ΡΠΈ ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΠΈΠΉ ΡΠΈΠΏ Ρ ΠΏΡΠ±Π»ΡΡΠ½ΠΎΠΌΡ API.
Π£ ΠΏΠΎΠ·ΠΈΡΡΡ ΠΏΠΎΠ²Π΅ΡΠ½Π΅Π½Π½Ρ Π²ΠΈΠ²Π΅Π΄Π΅Π½Π½Ρ Ρ ΡΠΊΠ»Π°Π΄Π½ΠΈΠΌ. Π€ΡΠ½ΠΊΡΡΡ, ΡΠΎ ΠΏΠΎΠ²Π΅ΡΡΠ°Ρ
impl Foo
, Π²ΠΈΠ±ΠΈΡΠ°Ρ ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΠΈΠΉ ΡΠΈΠΏ, ΡΠΊΠΈΠΉ Π²ΠΎΠ½Π° ΠΏΠΎΠ²Π΅ΡΡΠ°Ρ, Π½Π΅ Π·Π°ΠΏΠΈΡΡΡΡΠΈ ΠΉΠΎΠ³ΠΎ Ρ Π²ΠΈΡ ΡΠ΄Π½ΠΎΠΌΡ ΠΊΠΎΠ΄Ρ. Π€ΡΠ½ΠΊΡΡΡ, ΡΠΎ ΠΏΠΎΠ²Π΅ΡΡΠ°Ρ ΡΠ·Π°Π³Π°Π»ΡΠ½Π΅Π½ΠΈΠΉ ΡΠΈΠΏ, Π½Π°ΠΏΡΠΈΠΊΠ»Π°Π΄,collect<B>() -> B
, ΠΌΠΎΠΆΠ΅ ΠΏΠΎΠ²Π΅ΡΠ½ΡΡΠΈ Π±ΡΠ΄Ρ-ΡΠΊΠΈΠΉ ΡΠΈΠΏ, ΡΠΎ Π·Π°Π΄ΠΎΠ²ΠΎΠ»ΡΠ½ΡΡB
, Ρ ΠΊΠΎΡΠΈΡΡΡΠ²Π°ΡΠ΅Π²Ρ ΠΌΠΎΠΆΠ΅ Π·Π½Π°Π΄ΠΎΠ±ΠΈΡΠΈΡΡ Π²ΠΈΠ±ΡΠ°ΡΠΈ ΠΎΠ΄ΠΈΠ½ Π· Π½ΠΈΡ , Π½Π°ΠΏΡΠΈΠΊΠ»Π°Π΄, Π·Π° Π΄ΠΎΠΏΠΎΠΌΠΎΠ³ΠΎΡlet x: Vec<_> = foo.collect()
Π°Π±ΠΎ turbofish,foo.collect::<Vec<_>>()
.
Π―ΠΊΠΈΠΉ ΡΠΈΠΏ debuggable
? Π‘ΠΏΡΠΎΠ±ΡΠΉΡΠ΅ let debuggable: () = ..
, ΡΠΎΠ± ΠΏΠΎΠ±Π°ΡΠΈΡΠΈ ΠΏΠΎΠ²ΡΠ΄ΠΎΠΌΠ»Π΅Π½Π½Ρ ΠΏΡΠΎ ΠΏΠΎΠΌΠΈΠ»ΠΊΡ.