सबसे पहले, @type
निर्देश के साथ निर्दिष्ट प्रकार सार्वजनिक डिफ़ॉल्ट रूप से कर रहे हैं (जैसा कि @typep
साथ प्रकार परिभाषित करने के खिलाफ)। इसका मतलब यह है कि भले ही एक मॉड्यूल में कोई चश्मा है, एक प्रकार को परिभाषित अन्य डेवलपर्स जब उनके कार्यों लेखन कि प्रकार का उपयोग करने की अनुमति देता है:
@doc "Computes the length of a URI."
@spec foo(URI.t) :: non_neg_integer
def foo(uri), do: # ...
__MODULE__
एक विशेष रूप है कि एक परमाणु के रूप में वर्तमान मॉड्यूल का नाम लिए विस्तारित है (docs for it देखें), तो यह:
defmodule MyModule do
@type t :: %__MODULE__{}
end
एक MyModule.t
प्रकार को परिभाषित करेगा। t
प्रकार का सबसे आम उपयोग structs और प्रोटोकॉल का प्रतिनिधित्व करने के लिए है (उदा।, Enum.t
)। यह पैटर्न बेहद आम है:
defmodule User do
defstruct [:name, :email]
@type t :: %__MODULE__{name: String.t, email: String.t}
end
उस बारे में '@ typep' और' @ type'। '@ अपारदर्शी 'का अर्थ क्या है? मैंने सोचा कि यह एक प्रकार है जो निजी –
@ क्रिजिज़्टोफेंडे '@ ओपेक' प्रकार सार्वजनिक हैं लेकिन वे प्रकार की आंतरिक संरचना को प्रकट नहीं करते हैं (उदाहरण के लिए, संरचना में फ़ील्ड सार्वजनिक नहीं हैं बल्कि संरचना के प्रकार है। '@ टाइपपी' प्रकार पूरी तरह से निजी हैं। क्या यह समझ में आता है? – whatyouhide
यह करता है। आंशिक रूप से। क्यों उपयोग करने योग्य है लेकिन आंतरिक रूप से निरीक्षण योग्य नहीं है –