2014-10-11 13 views
5

Sto cercando di creare un tipo "intero mod p" in Julia. (Sono sicuro che ci sia già un pacchetto per questo, è solo un esercizio di personale.)Riferimento a un parametro di tipo come parametro di funzione in Julia

type Intp{p} 
    v::Int8 
end 

function add(a::Intp{p},b::Intp{p}) 
    return Intp{p}((a.v + b.v) % p) 
    end 

sto ottenendo un errore quando si definisce aggiuntivo che dice p non è definito. Come riferimento p dall'interno aggiungi?

. (Nota: avrei potuto fare qualcosa di simile

type Intp 
    v::Int8 
    p 
end 

function add(a::Intp,b::Intp) 
    return Intp((a.v + b.v) % a.p,p) 
    end 

ma ciò richiederebbe che p essere conservato ad ogni singolo numero mi sento come questo sarebbe inefficiente, e io ho la mia mente su generalizzazioni in cui sarebbe Sarebbe davvero poco efficiente, preferirei essere specificato solo una volta, per il tipo, e referenziato in funzioni che considerano argomenti come argomenti.)

risposta

7

Il tuo primo esempio è molto vicino, ma devi includere {p} tra nome del metodo e la firma in questo modo:

function add{p}(a::Intp{p},b::Intp{p}) 
    return Intp{p}((a.v + b.v) % p) 
end 

In caso contrario, si sta scrivendo un metodo per un paio di Intp{p} valori in cui p è tutto ciò che l'attuale valore specifico di p può essere - che, nel tuo caso, sembra essere alcun valore, quindi il messaggio di errore. Quindi la firma generale di un metodo di Julia è:

  1. nome del metodo
  2. parametri di tipo a { } (opzionale)
  3. argomenti a ()
+1

Grazie Stefan. Mi piace la tua lingua. –

Problemi correlati