Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/83.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Julia中的编译器消息_Julia - Fatal编程技术网

Julia中的编译器消息

Julia中的编译器消息,julia,Julia,考虑以下代码: 文件C.jl module C export printLength printLength = function(arr) println(lentgh(arr)) end end #module 文件Main.jl using C main = function() arr = Array(Int64, 4) printLength(arr) end main() 让我们试着执行它 $ julia Main.jl ERROR: lent

考虑以下代码:

文件C.jl

module C

export printLength

printLength = function(arr)
    println(lentgh(arr))
end

end #module
文件Main.jl

using C

main = function()
    arr = Array(Int64, 4)
    printLength(arr)
end

main()
让我们试着执行它

$ julia Main.jl 
ERROR: lentgh not defined
 in include at /usr/bin/../lib64/julia/sys.so
 in process_options at /usr/bin/../lib64/julia/sys.so
 in _start at /usr/bin/../lib64/julia/sys.so
while loading /home/grzes/julia_sucks/Main.jl, in expression starting on line 8
显然,它没有编译,因为
lentgh
拼写错误。问题是我收到的信息<代码>第8行开始的表达式仅为
main()
。Julia无可救药地没有指出无效的代码片段——它只是指向调用
main
,但错误的行甚至不在该文件中!现在想象一个真实的项目,其中错误隐藏在调用堆栈的深处。Julia仍然不愿意透露更多的信息,问题开始于执行的入口点。像那样工作是不可能的


有没有办法强迫Julia给出更精确的消息?

在这种情况下,这几乎肯定是内联的结果:你的
printLength
函数很短,几乎肯定是内联到调用站点,这就是为什么你得到了第8行


最终,内联将不会导致回溯问题。目前,如果您正在运行julia的0.4预发行版,您最好的选择是以julia的身份启动julia,即
julia--inline=no
,然后再次运行您的测试。

与您的问题不完全相关,但您正在使用您的定义创建匿名函数,这些函数通常性能不太好:。更具朱利安风格的方法是类似于
printLength(arr)=println(length(arr))
。这不会改善错误消息,只是性能不是很重要,但是julia代码通常不使用驼峰大小写——下划线是首选。我看到的大多数julia代码都使用
function main()
而不是
main=function()
——如上所述,您会获得更好的性能。我想我有一个习惯,就是从R编写
f=function()
。我不知道这在julia中是一个不好的做法。谢谢你指出这一点!我不相信这只是内联的问题——对于更复杂的函数,行为是一样的。无论如何,我从github(0.4.0-dev)编译了julia的最新版本。这个版本正好指向错误的行(即使没有
--inline=no
)。非常感谢所有贡献者:)。我可能承认将0.4版作为解决方案。