我正在调试一些Julia代码并试图弄清楚为什么以下不起作用.(朱莉娅0.6.3)
struct Foo
foo::String
end
k = Foo("bar")
finalizer(k, k->print("finalized!"))
Run Code Online (Sandbox Code Playgroud)
虽然我希望它打印"最终确定!",但实际上我收到以下错误:
ERROR: objects of type Foo cannot be finalized
Stacktrace:
[1] finalizer(::Any, ::Any) at ./base.jl:127
Run Code Online (Sandbox Code Playgroud)
我可以找到关于终结器功能的文档很少,没有例子,我做错了什么?
如果查找finalizer
帮助,您将了解对象的类型必须是可变结构.
特别是finalizer
在base.jl文件中的定义中,您可以看到有一个检查:
if isimmutable(o)
error("objects of type ", typeof(o), " cannot be finalized")
end
Run Code Online (Sandbox Code Playgroud)
意味着您无法为不可变对象设置终结器.
在Julia 0.7中,语法finalizer
略有不同,但行为是相同的,请参阅https://github.com/JuliaLang/julia/blob/master/base/gcutils.jl#L15.
这是一个带有可变结构的示例:
julia> mutable struct Foo
foo::String
end
julia> k = Foo("bar")
Foo("bar")
julia> finalizer(k, k->print("finalized!"))
julia> finalize(k)
finalized!
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
403 次 |
最近记录: |