2016-04-04 30 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