मैं सही तरीके से जूलियाजूलिया में मॉड्यूल को अंतिम रूप देने के लिए सही तरीका क्या है?
में finalizers उपयोग करने के लिएजूलिया दस्तावेज़ीकरण देखें खोजने की कोशिश कर रहा हूँ:
finalizer (एक्स, समारोह)
रजिस्टर एक समारोह f (x) के लिए जब एक्स के लिए कोई प्रोग्राम-सुलभ संदर्भ नहीं है तो बुलाया जाए। यदि एक्स बिट्स प्रकार का है तो इस फ़ंक्शन का व्यवहार अप्रत्याशित है।
सबसे पहले मैं एक TestModule.jl
#in TestModule.jl
module TestModule
end
finalizer(TestModule,(t)->println("fin"))
और यह भी एक runtest.jl के साथ एक TestModule मानक पैकेज genetated
#in runtest.jl
using Base.Test
using TestModule
तो मैं पैकेज का परीक्षण करने की कोशिश की, लेकिन मैं त्रुटि प्राप्त करते हुए परीक्षण पास किया गया था:
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
उस के बाद मैं एक और परीक्षण का मामला
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
व्यवस्था की ऊपर परीक्षण मामलों के अनुसार मैं कुछ सवाल
- है क्यों
TestModule
के लिए इस तरह केfinalize
विधि जोड़ने परीक्षण प्रक्रिया के दौरान त्रुटि उत्पन्न करता है? - क्यों
finalize
विधि आमंत्रित नहीं किया गया, जबकि मैं स्पष्ट संदर्भ क्या सही तरीके से एक मॉड्यूल
(ओएस = उबंटू, जूलिया संस्करण = 0.4.0)
finalize
विधि जोड़ने के लिए है
संपादित
@Maciek के रूप में उल्लेख किया है, gc()
workspace()
भी बाद बुला, मदद नहीं करते।
धन्यवाद