इस बार मैं alias
का उपयोग कर रहा हूं, लेकिन आज मुझे मौका मिला कि डी typedef
है। दिलचस्प है, टीडीपीएल इसे तब तक कवर नहीं करता है जब तक मैं कह सकता हूं (यहां तक कि D Keywords
और न ही इरेटा में सूचीबद्ध)। site does cover it, लेकिन यह इसके बारे में ज्यादा बात नहीं करता है। मेरा कोड या तो संकलित करता है, लेकिन दोनों के बीच क्या अंतर है, और मुझे typedef
alias
पर कब उपयोग करना चाहिए?'उपनाम' और 'टाइपपीफ' के बीच क्या अंतर है?
उत्तर
alias
मौजूदा के लिए एक नया नाम बनाता है। typedef
केवल प्रकार पर काम करता है, और वास्तव में एक नए प्रकार बनाता है:
alias int A;
typedef int B;
pragma(msg, is(A == int)); // true
pragma(msg, is(B == int)); // false
typedef
के साथ, आप भी डिफ़ॉल्ट प्रारंभकर्ता बदल सकते हैं:
typedef int A = 42;
A a;
A[5] b;
void main()
{
assert(a == 42);
foreach(i; b) assert(i == 42);
}
alias
अधिक सामान्य है। यह भी प्रतीकों के साथ काम करता है:
import std.stdio;
import std.conv : to;
alias to!(string) toString;
void main()
{
int a;
alias a b;
a = 1;
writeln(b); // 1
string s = toString(2);
writeln(s); // 2
}
alias
भी प्रयोग किया जाता है जब आप अधिभार सेट मर्ज करना चाहते हैं:
import std.stdio;
class Base
{
void foo() { writeln("base"); }
}
class Derived : Base
{
alias super.foo foo; // merge overload sets
void foo(int i) { writeln("derived"); }
}
void main()
{
auto a = new Derived;
a.foo(); // base
a.foo(0); // derived
}
स्पष्ट मर्ज बिना
, का उपयोग कर Derived
का एक उदाहरण अनुमति नहीं है Base.foo
बुला, क्योंकि Derived.foo
डिफ़ॉल्ट रूप से इसे छुपाता है।
यह केवल कक्षाओं के लिए आवश्यक नहीं है; यदि दो अलग-अलग आयातित मॉड्यूल से कार्य एक दूसरे को अधिभारित करना है, तो उन्हें alias
के साथ स्पष्ट रूप से विलय किया जाना चाहिए।
typedef
बहिष्कृत किया गया है। डीएमडी संस्करण 2.057 के रूप में, typedef
का उपयोग करके -d
("बहिष्कृत" के लिए) ध्वज को संकलित करने की आवश्यकता है।
This pull requestTypeDef
std.typecons
मानक पुस्तकालय में typedef
की कार्यक्षमता नकल के लिए एक टेम्पलेट कहते हैं।
'टाइपपीफ' कीवर्ड डी 1 का अवशेष है, और हमेशा इसे बहिष्कृत करने का इरादा था। डी 2.057 के रूप में, यह पूरी तरह से बहिष्कृत किया गया था। डी 2 के साथ काम करते समय आपको हमेशा उपनाम का उपयोग करना चाहिए।
- 1. xtype और उपनाम के बीच क्या अंतर है?
- 2. टाइपपीफ और उपयोग के बीच अंतर क्या हैं?
- 3. सी ++ में 'स्ट्रक्चर' और 'टाइपपीफ स्ट्रक्चर' के बीच अंतर?
- 4. सी ++ 11 में 'टाइपपीफ' और 'उपयोग' के बीच क्या अंतर है?
- 5. uint और System.UInt32 के बीच क्या अंतर है?
- 6. DOMContentLoaded और DOMContentReady के बीच क्या अंतर है?
- 7. # {} $ {} और% {} के बीच क्या अंतर है?
- 8. [अपरिभाषित] और [,] के बीच क्या अंतर है?
- 9. $ और $$ के बीच क्या अंतर है?
- 10. के बीच क्या अंतर है:। और: आर !?
- 11. भिन्नता और '-' के बीच क्या अंतर है?
- 12. "$^एन" और "$ +" के बीच क्या अंतर है?
- 13. के बीच क्या अंतर है?
- 14. अंतर और कहां के बीच क्या अंतर है?
- 15. बंडल और बंडल के बीच अंतर
- 16. file_get_contents और fread बीच क्या अंतर है
- 17. क्या बीच का अंतर है :: और ::: स्काला
- 18. "। +" और "। +?" के बीच अंतर
- 19. पायथन: __builtin__ और __builtins__ के बीच क्या अंतर है?
- 20. टेम्पलेट टाइपपीफ - आपका काम क्या है?
- 21. $ {} और # {} के बीच अंतर क्या हैं?
- 22. PHP के बीच क्या अंतर है और इसमें शामिल है?
- 23. अपवाद के .TOString() और मैसेज के बीच क्या अंतर है?
- 24. 7zip के 7z.sfx और 7zsd.sfx के बीच क्या अंतर है?
- 25. डीएल के फाइलवर्सन और उत्पादवर्जन के बीच क्या अंतर है?
- 26. UIImageView के फ्रेम और सीमाओं के बीच क्या अंतर है?
- 27. फ़ायरबग के console.log() और console.debug() के बीच क्या अंतर है?
- 28. पैरामीटर परिभाषाओं के बीच अंतर (प्रकार और नाम), और (प्रकार * नाम) के बीच अंतर क्या हैं?
- 29. ओरिएंटब संस्करणों के बीच क्या अंतर है?
- 30. एन्कोड/डीकोड के बीच क्या अंतर है?
इसे क्यों हटा दिया गया था? – Mehrdad
उपनाम एक सामान्यीकृत एलियासिंग सुविधा है; आप इसे उपनाम फ़ील्ड, फ़ंक्शंस, चर, प्रकार आदि के लिए उपयोग कर सकते हैं। यह निर्णय लिया गया था कि यह टाइपपीफ होने से बेहतर डिजाइन था जो केवल प्रकार के लिए काम करता है। इसके अलावा, टाइपिफ़ वास्तव में कीवर्ड की वास्तव में खराब पसंद है जो इसके लिए करता है। –
@ ज़ोर: अजीब ... यह बहुत सहज लग रहा था (मौजूदा 'के आधार पर एक नया' प्रकार 'परिभाषित करता है) और यह वास्तव में हैंडल और कई अन्य चीजों को परिभाषित करने में बेहद उपयोगी था ... – Mehrdad