Próbuję znaleźć właściwą drogę do korzystania finalizatory w JuliaJaki jest właściwy sposób napisania metody finalizacji modułu w Julii?
Zapoznaj się z dokumentacją Julia:
finalizatora (x, funkcja)
przypisać funkcję f (x) wywoływane, gdy nie ma żadnych dostępnych w programie odniesień do x. Zachowanie tej funkcji jest nieprzewidywalne, jeśli x jest typu bitowego.
Najpierw genetated pakiet standardowy TestModule z TestModule.jl
#in TestModule.jl
module TestModule
end
finalizer(TestModule,(t)->println("fin"))
a także runtest.jl
#in runtest.jl
using Base.Test
using TestModule
potem starałem się przetestować pakiet, ale dostałem błąd podczas test został przyjęty:
julia> Pkg.test("TestModule")
INFO: Testing TestModule
jl_uv_writecb() ERROR: bad file descriptor EBADF
jl_uv_writecb() ERROR: bad file descriptor EBADF
jl_uv_writecb() ERROR: bad file descriptor EBADF
jl_uv_writecb() ERROR: bad file descriptor EBADF
jl_uv_writecb() ERROR: bad file descriptor EBADF
jl_uv_writecb() ERROR: bad file descriptor EBADF
jl_uv_writecb() ERROR: bad file descriptor EBADF
jl_uv_writecb() ERROR: bad file descriptor EBADF
jl_uv_writecb() ERROR: bad file descriptor EBADF
jl_uv_writecb() ERROR: bad file descriptor EBADF
INFO: TestModule tests passed
po tym umówiłem kolejny przypadek testowy
julia> workspace() # new workspace
julia> typeof(TestModule) # make sure *there are no program-accessible references to `TestModule`*
ERROR: UndefVarError: TestModule not defined
julia> using TestModule
julia> finalize(TestModule)
fin # finalize method is working
julia> typeof(TestModule)
Module # make sure *there is program-accessible reference to `TestModule`*
julia> workspace() # force clear references
julia> typeof(TestModule) # check that *there are no program-accessible references*
ERROR: UndefVarError: TestModule not defined
Według powyższych przypadków testowych mam kilka pytań
- Dlaczego dodanie takiej metody
finalize
dlaTestModule
generuje błąd podczas procesu testowego? - Dlaczego
finalize
metoda nie został powołany, a ja wyraźne odniesienia Co jest właściwym sposobem na dodanie
finalize
metodę moduł(OS = Ubuntu, Julia Version = 0.4.0)
EDIT
jak @Maciek wspomniałem, nazywając gc()
po workspace()
Ponadto, nie pomoże.
dzięki