如何退出/退出“包含”文件

时间:2016-02-05 14:16:24

标签: julia

"example.jl"文件中我可以做什么来退出/返回命令行中对include()的调用

julia> include("example.jl")
没有现有的朱莉娅本身。 quit()只会终止朱莉娅。

编辑:对我来说,这在交互式开发代码时非常有用,例如包含一个测试文件,并在满足某个条件时从执行返回到julia提示符,或者只编译我当前正在处理的测试而没有重新组织代码。

4 个答案:

答案 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.jlRebugger.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.jlTest包也不是很好。因此,当您使用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