2016-04-04 66 views
6

Julia默認將許多名稱導入範圍。有沒有辦法在我無意中覆蓋其中一個時發出警告?當我在Julia中覆蓋函數時發出警告?

+0

這已經在開發版本(這將成爲茱莉亞-0.5) - 現在你得到一個警告。 – tholy

+0

是的,儘管我試圖擺脫我在Julia v0.5上使用過的軟件包中的一些警告,但我已經設法找到並修復了一些bug(錯誤在v0.3和v0中)。 4,但至今沒有人注意到),所以這是一個非常可喜的語言變化。 –

回答

2

在模塊和基本函數的上下文中,如果您覆蓋名稱,Julia已經提醒您。請參見下面的例子是開V 0.4.5工作:

模塊:

在modA.jl:

module modA 

export test 

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

在modB.jl:

module modB 

export test 

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

在REPL:

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

基函數

在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. 

據我所知,這不符合用戶自定義函數工作;見下文:

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 

您是否對輸入名稱有不同的上下文?

+0

例如,如果我在REPL中使用'readdlm(x)= x^2',它不會給出任何警告(v0.4.2),儘管這會覆蓋readdlm。 – becko

+0

這會在v0.4.5中拋出一個錯誤'錯誤:方法定義中的錯誤:函數DataFmt.readdlm必須顯式導入才能被擴展。自0.4.2以來,此功能可能已經/增加了改進。 –

+0

我只能等到Julia 0.4.5上Ubuntu的ppa。 – becko