2015-06-11 12 views
7

Herhangi bir nedenden dolayı, Rust derleyicisi, sağladığım Hata türü Hata Ayıklaması'nı uygulamasına rağmen Result'un unwrap uygulanmadığından şikayet ediyor. Hata veren kod aşağıda verilmiştir.Sonuç türü, "unwrap" adlı bir kapsamı uygulamıyor "unwrap"

use std::fmt::{Display, Debug}; 
use std::error::Error; 

trait MyError: Error + Display + Debug {} 
type MyResult<T> = Result<T, MyError>; 

trait Foo: Clone {} 

trait MyTrait { 
    fn my_function<T: Foo>(&self) -> MyResult<T>; 

    fn unwrap_function<T: Foo>(&self) -> T { 
     self.my_function().unwrap() 
    } 
} 

cevap

4

Eğer Aslında bir beton türü değil bir unsized typeMyError olarak olmasını türünü tanımlamak

type MyResult<T> = Result<T, MyError>; 

tipi, ama bir özellik tanımladığınızda. Ama Result<T, E> uygulanması örtük bir büyüklükte tipi olmak E gerektirir

impl<T, E> Result<T, E> where E: Debug { 
    /* ... */ 
} 

belirtiyor. Bu nedenle, sizin durumunuzda olduğu gibi, uygulama geçersiz ve kullanılamıyor (aslında, Result<T, E>'un tümünün uygulanması T ve E boyutlarını gerektiriyorsa, büyüklükte bir Result çok kullanışlı değildir).

sizin durumunuzda en basit düzeltme böyle bir Box içinde hatayı koymaktır:

type MyResult<T> = Result<T, Box<MyError>>; 
İlgili konular