2016-08-07 2 views
6

एक समारोह वस्तु f को देखते हुए, मैं कैसे पता करूँ:फ़ंक्शन ऑब्जेक्ट को देखते हुए, मैं इसका नाम और मॉड्यूल कैसे ढूंढूं?

  1. समारोह के नाम
  2. मॉड्यूल इसकी विधि (ओं)?

जूलिया 0.4 में मैं f.env.name का उपयोग कर नाम ढूंढ पाया, लेकिन मॉड्यूल के लिए कोई सुझाव नहीं। जूलिया 0.5 के लिए मैं दो में से कोई भी नहीं ढूंढ पाया। यदि आप एक स्ट्रिंग

मॉड्यूल है, जैसा कि आप (यानी प्रति प्रकार हस्ताक्षर) विधि के अनुसार होने जा रहा पता चाहते Symbol(f) या string(f):

उत्तर

4

@ ऑक्सीनाबॉक्स का जवाब सही है। जोड़ने के लिए, typeof(f).name.mt.namef.env.name के लिए v0.5 प्रतिस्थापन है। . से बचने के लिए यह उपयोगी हो सकता है जो गैर-stdlib मॉड्यूल में पेश किए गए फ़ंक्शन में string लागू करने पर होता है। वहां भी Base.function_name(f) मौजूद है जो जूलिया संस्करण में परिवर्तन होने पर शायद तोड़ने की संभावना कम होती है।

व्यक्तिगत विधियों के मॉड्यूल के बजाए एक फ़ंक्शन (प्रकार) पेश किया जाने वाला मॉड्यूल प्राप्त करने के लिए, typeof(f).name.module, या संभवतः बेहतर संस्करण, Base.function_module(f) है। विधि तालिका का मॉड्यूल शायद वही है; जिसे typeof(f).name.mt.module के माध्यम से प्राप्त किया जा सकता है।

ध्यान दें कि V0.4 में f.env, typeof(f).name.mt का एक सीधा बराबर है तो V0.4 ही f.env.name और f.env.module लागू पर।

+0

'Base.function_name (f)' और 'Base.function_module (f) 'जूलिया 0.5 के लिए एक सही समाधान की तरह दिखता है। हो सकता है कि आपके पास जूलिया 0.4 में मॉड्यूल नाम का समाधान भी हो? – ffriend

+0

@ffriend Sure, एक अतिरिक्त पैराग्राफ जोड़ा गया। –

+0

आह, इसे पहले नहीं मिला। धन्यवाद! – ffriend

5

नाम आसान है। methods(f) एक विधि तालिका लौटने के साथ जो फाइलों के संदर्भ में सभी विधियों और कहां हैं, प्रिंट करता है।

आप [meth.module for meth in methods(f)] कुछ नहीं कर सकता मॉड्यूल

प्राप्त करने के लिए तो एक उदाहरण का उपयोग करने, collect कार्य करते हैं।

julia> using DataStructures #so we have some non-Base definitions 

julia> Symbol(collect) 
:collect 

julia> methods(collect) 
# 5 methods for generic function "collect": 
collect(r::Range) at range.jl:813 
collect{T}(::Type{T}, itr) at array.jl:211 
collect(itr::Base.Generator) at array.jl:265 
collect{T}(q::DataStructures.Deque{T}) at /home/ubuntu/.julia/v0.5/DataStructures/src/deque.jl:170 
collect(itr) at array.jl:236 

julia> [meth.module for meth in methods(collect)] 
5-element Array{Module,1}: 
Base 
Base 
Base 
DataStructures 
Base 

julia> first(methods(collect, (Deque,))).module 
DataStructures 
+0

का उपयोग कर पा सकते हैं अच्छा लग रहा है, धन्यवाद! जूलिया 0.4 में विधि के मॉड्यूल को खोजने का कोई तरीका है? – ffriend

+0

@ffriend यहां प्रस्तुत समाधान v0.4 के समान काम करता है। –

0

नहीं वास्तव में इस सवाल का जवाब है, लेकिन निकट से संबंधित: यदि आप फ़ाइल नाम और f की लाइन संख्या functionloc(f)

संबंधित मुद्दे

 संबंधित मुद्दे