Đây là một testcase đơn giản, mà vẫn còn hoạt động trên playpen:"thử!" vĩ mô ngừng làm việc sau khi Rust nâng cấp
use std::num;
use std::str::FromStr;
use std::convert::From;
#[derive(Debug)]
struct Error(String);
impl From<num::ParseFloatError> for Error {
fn from(err: num::ParseFloatError) -> Error {
Error(format!("{}", err))
}
}
fn parse(s: &String) -> Result<f64, Error> {
Ok(try!(<f64 as FromStr>::from_str(&s[..])))
}
fn main() {
println!("{:?}", parse(&"10.01".to_string()));
}
Tuy nhiên, sau khi tôi đã xây dựng rustc mới nhất từ git (bây giờ nó rustc 1.1.0-dev (1114fcd94 2015-04-23)
), nó dừng lại biên soạn với lỗi sau :
<std macros>:6:1: 6:32 error: the trait `core::convert::From<core::num::ParseFloatError>` is not implemented for the type `Error` [E0277]
<std macros>:6 $ crate:: convert:: From:: from (err)) } })
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
<std macros>:1:1: 6:48 note: in expansion of try!
exp.rs:15:8: 15:48 note: expansion site
error: aborting due to previous error
Tôi không thể tìm ra điều gì sai. Tại sao trình biên dịch không thể tìm thấy thực hiện đặc điểm của tôi?
Bạn có thể thử gọi trực tiếp từ «std :: convert :: From :: from' (nghĩa là mở rộng macro) để giúp chẩn đoán không? 'match s.parse() {Ok (f) => Ok (f), Err (e) => trả về Err (Từ :: từ (e))}'. – huon
Có - thông báo lỗi là giống nhau, nhưng con trỏ dòng màu đỏ bây giờ là dưới 'Từ :: từ'. – swizard
Tôi vừa thử cùng một mã với lỗi 'u64' và' ParseIntError' - nó hoạt động! Vì vậy, có vẻ như vấn đề của tôi chỉ liên quan đến 'ParseFloatError'. – swizard