启动命令行窗口自定义函数 首次运行报错running in world age X, while current world is Y,非首次运行时正常
技术分享
发布于 2025-07-10 10:35:18
查看 1过去327天
问题现象
启动命令行窗口自定义函数 首次运行报错"running in world age X, while current world is Y",非首次运行时正常,详细说明如下。
Input.jl 脚本:
Base.@kwdef mutable struct input
aa::Int32 = 0
bb::Vector{Int32} = zeros(8)
end
main 函数 脚本
function main(path)
include(joinpath(path, "input.jl"))
in1 = input()
println(propertynames(in1))
end
启动命令行窗口
运行自定义函数 main ,得到 main 函数定义

输入 input 脚本所在路径 path ,运行 main 函数
main(path)
首次运行报错,如下图:

非首次运行时正常

解决方法
使用 Base.invokelatest 绕过world age检查。
在Julia中遇到**“MethodError: no method matching… world age”错误,通常是因为函数定义与方法的动态更新顺序不一致**导致的。
在 Julia 中,“running in world age X, while current world is Y” 错误与 Julia 的 方法分派机制 和 代码热更新(hot-reloading) 有关。这是由 Julia 的 “world age” 计数器机制触发的,旨在确保代码的稳定性和一致性。
1、结构体定义脚本 input.jl 里加一行封成函数,如:gen_input() = input()
Base.@kwdef mutable struct input
aa::Int32 = 0
bb::Vector{Int32} = zeros(8)
end
gen_input() = input()
2、使用 Base.invokelatest 绕过world age检查,Base.invokelatest主要用于函数如:Base.invokelatest(gen_input)
main.jl 脚本修改如下:
function main(path)
include(joinpath(path, "input.jl"))
in1 = Base.invokelatest(gen_input)
println(propertynames(in1))
end
3、启动命令行窗口自定义函数 main ,首次运行不报错
main(path)

所属专栏:Julia语言
产品信息:Syslab科学计算环境