Parameters argomenti della funzione sono per il metodo di disambiguazione piuttosto che di prestazioni. Dalla documentazione http://docs.julialang.org/en/latest/manual/style-guide/#avoid-writing-overly-specific-types
La cosa fondamentale da capire è che non v'è alcuna riduzione delle prestazioni a definire solo l'addone generale (x) = x + uno (x), perché Julia compilerà automaticamente versioni specializzate a seconda delle necessità. Ad esempio, la prima volta che si chiama addone (12), Julia compilerà automaticamente una funzione addone specializzata per gli argomenti x :: Int, con la chiamata a one() sostituita dal suo valore inline 1. Pertanto, le prime tre definizioni di addone sopra sono completamente ridondanti.
EDIT all'indirizzo commento:
La differenza tra le due firme è davvero evidente solo quando ci sono più di un argomento
Considerate le due funzioni:
julia> function foo(n::Integer, m::Integer)
println(typeof(n), typeof(m))
end
julia> function foo{T<:Integer}(n::T, m::T)
println("Parameterized: ", typeof(n), typeof(m))
end
Nel la prima funzione n
e m
devono essere entrambi numeri interi ma non devono essere lo stesso sottotipo di numero intero. Nella seconda funzione, sia m
e n
deve essere lo stesso sottotipo
julia> foo(1, 2)
Parameterized: Int64Int64
julia> foo(1, Int32(1))
Int64Int32
Grazie, ho capito il tuo punto, ma rispondo solo una parte della mia domanda. Il mio esempio è stato piuttosto banale, lo ammetto. Ma ho visto entrambe le forme nella base Julia e volevo sapere la differenza tra i due. – Davide
Ho aggiornato la risposta per indirizzare il tuo commento. – ptb
Quindi, in sostanza, con un singolo argomento entrambe le forme sono equivalenti, la prima richiede meno digitazioni. Grazie. – Davide