为什么可变结构不能在 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)
为什么不能在 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)