在"example.jl"
文件中我可以做什么来退出/返回命令行中对include()
的调用
julia> include("example.jl")
没有现有的朱莉娅本身。 quit()
只会终止朱莉娅。
编辑:对我来说,这在交互式开发代码时非常有用,例如包含一个测试文件,并在满足某个条件时从执行返回到julia提示符,或者只编译我当前正在处理的测试而没有重新组织代码。
答案 0 :(得分:3)
我不太确定你要做什么,但听起来你最好将代码编写为函数,并使用return
退出。你甚至可以在include中调用该函数。
答案 1 :(得分:3)
克里斯托弗不会喜欢它,但是
stop(text="Stop.") = throw(StopException(text))
struct StopException{T}
S::T
end
function Base.showerror(io::IO, ex::StopException, bt; backtrace=true)
Base.with_output_color(get(io, :color, false) ? :green : :nothing, io) do io
showerror(io, ex.S)
end
end
与抛出错误相比,将提供一个更好的,更少警报的消息。
julia> stop("Stopped. Reason: Converged.")
ERROR: "Stopped. Reason: Converged."
来源:https://discourse.julialang.org/t/a-julia-equivalent-to-rs-stop/36568/12
答案 2 :(得分:1)
您可能需要在Julia中进行调试工作流。如果您使用Revise.jl
和Rebugger.jl
,则可以完全满足您的要求。
您可以插入一个断点,然后进入包含文件中的代码。
如果您从julia提示符中包含要由Revise.jl
跟踪的文件,则需要使用includet(
。
通过Rebugger
中的键盘快捷键,您可以迭代并检查变量并修改代码,并从包含真实值的文件中重新运行它。
Revise
使您可以重新加载功能和模块,而无需重新启动julia会话以获取更改。
https://timholy.github.io/Rebugger.jl/stable/
https://timholy.github.io/Revise.jl/stable/
这种组合非常有力,蒂姆·霍利(Tim Holy)对它进行了深入的描述。
https://www.youtube.com/watch?v=SU0SmQnnGys
https://youtu.be/KuM0AGaN09s?t=515
请注意,Revise存在一些局限性,例如它不会重置全局变量,因此,如果您使用某些全局计数或其他内容,则下次运行或返回时将不会重置它。它。同样,runtests.jl
和Test
包也不是很好。因此,当您使用Revise开发时,完成后将其移至runtests.jl
中。
Juno IDE(Atom + uber-juno
软件包)也对代码检查和逐行运行提供了良好的支持,并且最近调试也获得了一些良好的支持。我从julia提示符中使用了Rebugger,而不是从Juno IDE中使用过。
希望有帮助。
答案 3 :(得分:0)
@DanielArndt是对的。
它只是在你的包含文件中创建一个虚函数并将所有代码放在里面(除了之前放置的其他函数和变量声明部分)。因此,您可以在任意位置使用return
。仅在本地上下文中使用的变量可以保留在虚函数内。然后它最后调用新函数。
假设前面的代码是:
function func1(...)
....
end
function func2(...)
....
end
var1 = valor1
var2 = valor2
localVar = valor3
1st code part
# I want exit here!
2nd code part
您的代码如下所示:
var1 = valor1
var2 = valor2
function func1(...)
....
end
function func2(...)
....
end
function dummy()
localVar = valor3
1st code part
return # it's the last running line!
2nd code part
end
dummy()
其他可能性是将顶部变量放在具有global
前缀的函数内。
function dummy()
global var1 = valor1
global var2 = valor2
...
end
全局变量可以在辅助函数(静态范围)内部和REPL
另一个变体只声明变量,后面的使用是免费的
function dummy()
global var1, var2
...
end