2017-04-05 6 views
6

क्या डॉक्टरों में मॉड्यूल उपनाम का उपयोग करने का कोई तरीका है? मैं हर बार एक लंबा नाम टाइप नहीं करना चाहता हूं।इलीक्सिर - आप कामकाजी में उपनाम का उपयोग कैसे कर सकते हैं?

defmodule SomeLongModuleName.SubModule do 
    alias SomeLongModuleName.SubModule, as: SubModule 

    @doc """ 
     iex> SubModule.method(%{property_a: 1, property_b: 2) # CompileError 
     3 
    """ 
    def method(%{property_a: a, property_b: b) do 
    a + b 
    end 
end 

ऊपर के उदाहरण एक स्थिति है जहाँ मैं अन्य नाम का उपयोग करने के लिए लंबी लाइनों से बचने के लिए चाहते हो सकता है पता चलता है। क्या एक सिद्धांत में उपनाम का उपयोग करना संभव है?

+0

मुझे लगता है कि doctests वैश्विक से चलाने मान नेमस्पेस, इसलिए यह उपनाम देखने में सक्षम नहीं होगा। – Dylanthepiguy

उत्तर

11

दो तरीकों से मैं मॉड्यूल नाम को बार-बार टाइप करने के बारे में सोचने के बारे में सोच सकता हूं।

  1. अपने दस्तावेज़ों में

    प्रक्षेप का उपयोग और aliased नाम का उपयोग करें:

    defmodule SomeLongModuleName.SubModule do 
        alias SomeLongModuleName.SubModule, as: SubModule 
    
        @doc """ 
         iex> #{SubModule}.method(%{property_a: 1, property_b: 2}) 
         3 
        """ 
        def method(%{property_a: a, property_b: b}) do 
        a + b 
        end 
    end 
    
  2. उपयोग मॉड्यूल के बिना और doctest अपने परीक्षण से करने के लिए अपने कॉल में सिर्फ समारोह का नाम, जोड़ने import: true:

    defmodule SomeLongModuleName.SubModule do 
        @doc """ 
         iex> method(%{property_a: 1, property_b: 2}) 
         3 
        """ 
        def method(%{property_a: a, property_b: b}) do 
        a + b 
        end 
    end 
    
    doctest SomeLongModuleName.SubModule, import: true 
    
+1

अच्छा! पहला विकल्प एक (बल्कि साफ) हैक जैसा दिखता है, और दूसरा विकल्प ऐसा लगता है कि यह इस मामले के लिए बिल्कुल बनाया गया था। शायद ऑर्डर को चारों ओर स्विच करें? – Dylanthepiguy

+0

विकल्प 2 एक आकर्षण की तरह काम किया :) धन्यवाद। – PlagueHammer

1

यह पता चला है कि आप परीक्षण से ठीक पहले alias SomeLongModuleName.SubModule, as: SubModule लाइन डाल सकते हैं।

एक बेहतर समाधान दस्तावेज़ों में बहुत अधिक परीक्षण नहीं करना है, और उपनाम का उपयोग नहीं करना है। फिर, अपनी परीक्षण फ़ाइल में आप सहेजने के लिए alias SomeLongModuleName.SubModule, as: SubModule डाल सकते हैं।

1

जैसा कि डिलेंथेपीगुय द्वारा वर्णित है, यह doctest लाइन से पहले, उपनाम को टेस्टफाइल में डालने का एक बेहतर समाधान है।

परीक्षण के लिए अपने कोड को इंस्ट्रूमेंट करना आईएमएचओ कोड गंध है।

यह भी ध्यान दें कि as: Submodule डिफ़ॉल्ट और इसलिए अनावश्यक है।

1

बिल्डिंग lab419 और dylanthepiguy से जवाब पर: doctest साथ मॉड्यूल के लिए

defmodule SomeLongModuleName.SubModule do 
    @doc """ 
     iex> SubModule.add(x, y) 
     3 
    """ 
    def add(x, y) do 
    x + y 
    end 
end 

टेस्ट मामला:

doctest साथ मॉड्यूल

defmodule SomeLongModuleName.SubModuleTest do 
    use ExUnit.Case, async: true 

    # Alias the submodule so we don't have to use the fully qualified name 
    alias SomeLongModuleName.SubModule 

    doctest SomeLongModuleName.SubModule, import: true 
end 
संबंधित मुद्दे