专栏
标签
启动命令行窗口自定义函数 首次运行报错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 函数定义
image.png
输入 input 脚本所在路径 path ,运行 main 函数

main(path)

首次运行报错,如下图:
image.png
非首次运行时正常
image.png

解决方法

使用 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)

image.png

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

全部回答

暂无数据
暂无数据
用户
和原帖交流更多问题细节吧,去
我要发帖 我要发帖
资料中心 资料中心
查看更多>
热门帖子 热门帖子
主要贡献者 主要贡献者
过去7天