为什么可变结构不能在 Julia 的函数内定义

Why mutable struct cannot be defined inside a function in Julia

为什么不能在 Julia 的函数内部定义可变结构?

function test()
    mutable struct ABC
        x
        y
        z
        a
    end 
end

抛出错误:

ERROR: LoadError: syntax: "struct" expression not at top level

但如果结构是全局的,在函数外部并在函数内部访问,则代码可以正常工作。

结构类型必须在 top-level 处定义(即在“模块范围”中),正如错误提示的那样,您不能像示例中那样定义 function-local 结构。

如果您真的不想在模块中定义结构类型,那么您可以使用 NamedTuple,它有时可以代替“匿名结构类型”。示例:

function test()
    nt = (x = 1, y = 2, z = 3, a = "hello")
    # ...
end

您可以使用 meta-programming。强烈不推荐,除非你非常清楚你想要并且需要使用meta-programming。

function test()
    Main.eval(
        quote
           mutable struct ABC
               x
               y
               z
               a
           end
        end
    )
end

测试:

julia> test()

julia> fieldnames(ABC)
(:x, :y, :z, :a)