haxe
एब्सट्रैक्ट
खोज…
वाक्य - विन्यास
- अमूर्त पहचानकर्ता ( टाइपिंग के प्रकार ) {...}
- typeB से typeâ से सार पहचानकर्ता (अंतर्निहित प्रकार) ... typeâ को typeB को {...}
टिप्पणियों
एक अमूर्त प्रकार एक संकलन-समय प्रकार है जो रन-टाइम में अंतर्निहित प्रकार का समाधान करता है। इसका अर्थ है कि आप सार प्रकार हैक्स कंपाइलर द्वारा उत्पन्न स्रोत कोड में मौजूद नहीं है । इसके स्थान पर अंतर्निहित प्रकार, या अंतर्निहित कास्टिंग के लिए परिभाषित प्रकार रखे गए हैं।
abstract कीवर्ड द्वारा एब्सट्रैक्ट को चिह्नित किया जाता है, उसके बाद एक पहचानकर्ता और कोष्ठक में अंतर्निहित प्रकार।
सार केवल विधि क्षेत्र और गैर-भौतिक संपत्ति फ़ील्ड परिभाषित कर सकते हैं। गैर-इनलाइन विधि फ़ील्ड को निजी कार्यान्वयन वर्ग में स्थिर कार्यों के रूप में घोषित किया जाता है, जो कि अतिरिक्त प्रथम तर्क को अमूर्त के अंतर्निहित प्रकार के रूप में स्वीकार करता है।
ध्यान दें कि ऑपरेटर ओवरलोडिंग केवल अमूर्त प्रकारों के लिए ही संभव है।
डेटा सत्यापन के लिए सार
निम्नलिखित सार String प्रकार के आधार पर एक EmailAddress प्रकार को परिभाषित करता है जो पास किए गए तर्क को ई-मेल पते के रूप में मान्य करने के लिए एक नियमित अभिव्यक्ति का उपयोग करेगा। यदि पता मान्य नहीं है, तो एक अपवाद फेंक दिया जाएगा।
abstract EmailAddress(String) {
static var ereg = ~/^[\w-\.]{2,}@[\w-\.]{2,}\.[a-z]{2,6}$/i;
inline public function new(address:String) {
if (!ereg.match(address)) throw "EmailAddress "$address" is invalid";
this = address.toLowerCase();
}
}
निम्नानुसार अमूर्त का उपयोग करें।
var emailGood = new EmailAddress("[email protected]");
var emailBad = new EmailAddress("john.doe.com");
उदाहरण try.haxe.org पर देखें ।
संदर्भ
ऑपरेटर ओवरलोडिंग
ऑपरेटर ओवरलोडिंग केवल अमूर्त प्रकारों के साथ संभव है।
निम्न सार Array<Int> प्रकार के आधार पर एक Vec2i प्रकार को परिभाषित करता है। यह पूर्णांक मानों के साथ दो-घटक वेक्टर है। ऑपरेटर ओवरलोडिंग संभव है मेरे @:op संकलक मेटाडेटा । केवल उपलब्ध संख्यात्मक ऑपरेटरों को ओवरलोड किया जा सकता है - कस्टम ऑपरेटरों को निर्दिष्ट करने की अनुमति नहीं है।
abstract Vec2i(Array<Int>) {
public inline function getX() : Int {
return this[0];
}
public inline function getY() : Int {
return this[1];
}
public inline function new(x : Int, y : Int) {
this = [x, y];
}
@:op(A + B)
public inline function add(B : Vec2i) : Vec2i {
return new Vec2i(
getX() + B.getX(),
getY() + B.getY()
);
}
}
निम्नानुसार अमूर्त का उपयोग करें।
var v1 = new Vec2i(1, 2);
var v2 = new Vec2i(3, 4);
v1 + v2;
v1.add(v2);
उदाहरण try.haxe.org पर देखें ।