2015-04-29 2 views
2

Я вообще в состоянии использовать признак в качестве параметра типа что-то вроде Box <>:Как убрать признак, который имеет общие параметры типа?

trait CtxVal {} 
type CtxNodes = HashMap<String, Box<CtxVal>>; 

Но когда черта имеет собственные общие параметры типа, как PartialEq, я застрял.

type CtxNodes = HashMap<String, Box<PartialEq>>; 

Я получаю ошибку:

main.rs:6:37: 6:46 error: the type parameter `Rhs` must be explicitly specified in an 
     object type because its default value `Self` references the type `Self`        
main.rs:6 type CtxNodes = HashMap<String, Box<PartialEq>>;                                 
               ^~~~~~~~~ 

Если бы я, чтобы обеспечить тип для PartialEq, что бы это даже быть?

Box<PartialEq<???>> 

ответ

3

Вы должны указать, что вы хотите, чтобы объект, чтобы иметь возможность сравнить равны:

fn foo(value: Box<PartialEq<u8>>) -> bool { 
    *value == 42 
} 

fn bar(value: Box<PartialEq<&str>>) -> bool { 
    *value == "the answer" 
} 
+0

Mmmkay. Я думал, что для этого было больше, так как 'Box ' на самом деле не указывает фактический «тип», например 'Box ' будет или даже 'Box >'. Надеясь, там была какая-то магия для бокса. Но я вижу, как параметризация характеристики меняет ситуацию. – peter

Смежные вопросы