TryFrom<T> for U 暗示 TryInto <U> for T try_from 是自反的,这意味着 TryFrom<T> for T 已实现并且不会失败 - 用于在 T 类型的值上调用 T::try_from() 的关联 Error 类型是 Infallible 。当 ! 类型稳定时, Infallible 和 ! 将等效。 TryFrom<T>可以如下实现: use std::convert::TryFrom; ...
TryFrom和TryInto的功能和上文中介绍过的From/Into相同,但是它们可能会受控地失败: pubtraitTryFrom<T>:Sized{typeError;// Required methodfntry_from(value: T)->Result<Self,Self::Error>; }pubtraitTryInto<T>:Sized{typeError;// Required methodfntry_into(self)->Result<T,Self::Error>; } 通用实现...
参考:https://doc.rust-lang.org/stable/rust-by-example/conversion/try_from_try_into.html TryFrom/TryInto 和 From/Into 类似,不过用于可能发生异常的转换,所以返回结果是 Result。 示例 TryFrom usestd::convert::TryFrom;#[derive(Debug, PartialEq)]structEvenNumber(i32);implTryFrom<i32>forEvenNumber{...
TryFrom和TryInto的功能和上文中介绍过的From/Into相同,但是它们可能会受控地失败: pubtraitTryFrom<T>:Sized{typeError;// Required methodfntry_from(value:T)->Result<Self,Self::Error>;}pubtraitTryInto<T>:Sized{typeError;// Required methodfntry_into(self)->Result<T,Self::Error>;} 通用实现 实...
TryFrom和TryInto 在前一章中,我们学习了From和Into特性,这是 Rust 中用于肯定不会出错类型转换的习惯用法接口。但如果转换不能保证成功呢? 我们现在对错误有足够的了解,可以讨论From和Into的可能出错对应物:TryFrom和TryInto。 TryFrom和TryInto TryFrom和TryInto都定义在std::convert模块中,和From与Into一样。
fn try_from(value: &f64) -> Result<Foo, String> { Ok(Foo { a: *value }) } } fn main(){ let foo: Foo = 5.0.try_into().unwrap(); let bar: Foo = (&5.0).try_into().unwrap(); } Run Code Online (Sandbox Code Playgroud) ...
assert_eq!(EvenNumber::try_from(8), Ok(EvenNumber(8))); assert_eq!(EvenNumber::try_from(5), Err(()));// TryIntolet result: Result<EvenNumber, ()> = 8i32.try_into(); assert_eq!(result, Ok(EvenNumber(8))); let result: Result<EvenNumber, ()> = 5i32.try_into(); ...
TryFrom的相关Error类型不是通用的,并引入了通用的E(即impl<E> TryFrom for MyEnum)将不受约束,...
try!在前面已经解释过,它可以充当unwrap或return Err(err),这说法只是很大程度上是对的。实际上它意味着unwrap或者return Err(From::from(err))。由于From::from是一个不同类型间相互转换的工具,所以如果你使用try!,当中的错误若能够转换成返回类型,这将会自动转换。
实现From可以免费提供逆向的Into。TryFrom对TryInto也有同样的效果。Try*特质是用于可能失败的转换,它们都返回一个Result。 下面是MyError的实现。注意,我们在MyError中添加了变体,以表示错误的种类,而且我们的IOError变体封装了原始的std::io::Error。 #[derive(Debug)]enumMyError{EnvironmentVariableNotFound,IOError...