2017-11-11 83 views
2

我刚刚了解了朱莉娅的世界年龄,并且必须说这个概念需要一段时间才能沉入其中。为了帮助我接近它,在一些例子中能够明确地看到世界年龄可能是有用的。是否有捷径可寻?在Julia中获得世界时代功能的简单方法?

我想我可以以某种方式使我的例子,使他们总是遇到一个世界时代的错误,但我希望有一个不太令人难以置信的方式来实现这一点。

+0

触发世界年龄错误并检查调用它的函数的堆栈跟踪,以及如何获取该信息以将其打印出来。 –

+0

使用你的方法,我发现'ccall(:jl_get_world_counter,UInt,())'给你当前的世界时代,但我找不到他们阅读功能世界时代的地方。 – gTcV

回答

2

以下是黑客十岁上下,并且适用于0.6.1,但稍后可能会打破:

min_world(f) = (methods(f)).ms[1].min_world 

macro cur_world() 
    :(min_world(x -> $(rand())*x)) 
end 

而且它的工作原理如下:

julia> f(x) = 2x 
f (generic function with 1 method) 

julia> @cur_world() 
21827 

julia> g(x) = sqrt(x) 
g (generic function with 1 method) 

julia> @cur_world() 
21829 

julia> min_world(f) 
21826 

julia> min_world(g) 
21828 

采用世界年龄计数器在任何真实的代码中听起来都是错误的方式。

相关问题