2016-06-30 47 views
6

Dati i seguenti:Impossibile digitare alias un enum generica specializzata

use std::fmt::Debug; 

#[derive(Debug)] 
enum A<T: Debug> { 
    X, 
    Y(T), 
} 

#[derive(Debug)] 
struct B; 

type C = A<B>; 
// use A<B> as C; // Does not compile 

posso usarlo come:

fn main() { 
    let val0 = A::X::<B>; 
    let val1 = A::Y::<B>(B); 
    println!("{:?}\t{:?}", val0, val1); 
} 

Ma poi per più di un parametro generico (o se A, B ecc erano nomi molto più lunghi quindi per alias ho provato il seguente ma non viene compilato:

fn main() { 
    let val0 = C::X; 
    let val1 = C::Y(B); 
    println!("{:?}\t{:?}", val0, val1); 
} 

con errori:

src/main.rs:656:16: 656:20 error: no associated item named `X` found for type `A<B>` in the current scope 
src/main.rs:656  let val0 = C::X; 
           ^~~~ 
src/main.rs:657:16: 657:20 error: no associated item named `Y` found for type `A<B>` in the current scope 
src/main.rs:657  let val1 = C::Y(B); 

come ricorda anche io sono in grado di utilizzare use per risolvere il problema. C'è un modo per aggirarlo (perché scrivere tutto sembra essere ingombrante)?

rustc --version 
rustc 1.9.0 (e4e8b6668 2016-05-18) 
+0

Suona come funzionalità mancanti ... –

risposta

4

C'è un modo intorno ad esso (perché digitando il tutto sembra essere ingombrante)?

È possibile specificare C come il tipo di variabile in modo da poter utilizzare A::X o A::Y senza esplicito specificando il parametro del tipo:

let val0: C = A::X; 
let val1: C = A::Y(B); 
+0

Whoa! Non avrei mai potuto immaginare che - ho rinunciato quando 'C :: X' fallito. Ma il fatto che funzioni in questo modo (mentre non è il contrario) sembra un po 'offuscato, no? Ciò nonostante, risolve il mio problema di digitare i parametri del modello ovunque, quindi grazie! – ustulation

+3

@ustulation I * credo * il fatto è che 'A' il * tipo * e' A' lo * spazio dei nomi * sono cose diverse per quanto ne sa il compilatore. 'type' si prende cura del primo, non del secondo. Non è un grande stato di cose, ma loro sono le pause. Mi aspetterei che migliorasse in * qualche * punto. –

Problemi correlati