2016-04-04 10 views
6

Julia per impostazione predefinita importa molti nomi in ambito. C'è un modo per ottenere un avviso quando inavvertitamente sovrascrivo uno di loro?Ricevi un avviso quando sovrascrivo una funzione in Julia?

+0

Questo è già stato modificato nella versione di sviluppo (che diventerà julia-0,5) --- ora viene visualizzato un avviso. – tholy

+0

Sì, e mentre cercavo di sbarazzarmi di alcuni degli avvertimenti nei pacchetti che ho utilizzato su Julia v0.5, sono riuscito a trovare e correggere un numero di bug (i bug erano in v0.3 e v0. 4, ma nessuno se ne è accorto fino ad ora), quindi questo è un cambiamento molto gradito nella lingua. –

risposta

2

Nel contesto dei moduli e delle funzioni di base, Julia avvisa già se si sovrascrive un nome. Vedi gli esempi seguenti che lavorano su v 0.4.5:

MODULI:

In modA.jl:

module modA 

export test 

function test() 
    println("modA") 
end 
end 

In modB.jl:

module modB 

export test 

function test() 
    println("modB") 
end 
end 

In REPL:

julia> using modA 
julia> using modB 
WARNING: Using modB.test in module Main conflicts with an existing identifier 
julia> test() 
"modA" 

FUNZIONI BASE:

In REPL:

julia> function +(x::Float64, y::Float64) 
    println("my addition") 
end 

julia> WARNING: module Main should explicitly import + from Base 
WARNING: Method definition +(Float64, Float64) in module Base at float.jl:208 
overwritten in module Main at none:2. 

Per quanto ne so, questo non funziona con funzioni definite dall'utente; vedi sotto:

julia> function test(x::Float64, y::Float64) 
    println("First Definition") 
end 

julia> test(1.0, 2.0) 
First Definition 

julia> function test(x::Float64, y::Float64) 
    println("Second Definition") 
end 

julia> test(1.0, 2.0) 
Second Definition 

Hai in mente un contesto diverso per i nomi importati?

+0

Se faccio, ad esempio, 'readdlm (x) = x^2' nel REPL, non fornisce alcun avviso (v0.4.2), nonostante il fatto che questo sovrascriva' readdlm'. – becko

+0

Questo genera un errore in v0.4.5 'ERRORE: errore nella definizione del metodo: la funzione DataFmt.readdlm deve essere importata esplicitamente per essere estesa'. Questa funzionalità potrebbe essere stata/aggiunta migliorata dal 0.4.2. –

+0

Devo solo aspettare che Julia 0.4.5 arrivi su Ubuntu ppa. – becko

Problemi correlati