पिछले स्वीकृत उत्तर के अलावा, मैं enum
एस पर मिश्र धातु के साथ एक सप्ताह के अनुभव से कुछ उपयोगी अंतर्दृष्टि जोड़ना चाहता हूं, विशेष रूप से मानक sig
के साथ मुख्य अंतर पर।
यदि आप abstract sig + extend
का उपयोग करते हैं, तो आप एक मॉडल के साथ आएंगे जिसमें एक ही अवधारणा के अनुरूप कई सेट हैं। शायद एक उदाहरण इसे बेहतर साबित कर सकता है। मान लीजिए somthing
तरह
sig Car {
dameges: set Damage
}
आप पसंद
abstract sig Damage {}
sig MajorDamage, MinorDamage extends Damage {}
उपयोग करने के लिए बनाम
enum Damage {
MajorDamage, MinorDamage
}
पहले मामले में हम अलग अलग MinorDamage परमाणुओं के साथ एक मॉडल wiht आ सकते हैं (MinorDamage0, है MinorDamage1, ...) कारों से एसोसिएट, जबकि दूसरे मामले में आपके पास हमेशा एक ही माइनरडामेज होता है जिसके लिए विभिन्न कारें संदर्भित कर सकती हैं।
इस मामले में abstract sig + extend
फ़ॉर्म का उपयोग करने के लिए कुछ समझ हो सकती है (क्योंकि आप विभिन्न माइनरडामेज या मेजरडामेज तत्वों को ट्रैक करने का निर्णय ले सकते हैं)।
दूसरी ओर, यदि आप एक currentState: set State
करना चाहते हैं, यह करने के लिए एक
enum State {Damaged, Parked, Driven}
उपयोग करने के लिए अवधारणा मैप करने के लिए, क्रम में ठीक तीन State
जो प्रत्येक Car
का उल्लेख कर सकते करने के लिए बेहतर हो सकता है । इस तरह, Visualizer
में, आप अपने मॉडल को बिल्कुल राज्यों में प्रोजेक्ट करने का निर्णय ले सकते हैं और यह इस राज्य से जुड़े सभी Car
एस को हाइलाइट करेगा। आप abstract + extend
निर्माण के साथ ऐसा नहीं कर सकते हैं, क्योंकि MajorDamage0
पर प्रोजेक्टिंग से संबंधित केवल Car
को हाइलाइट करेगा और कुछ भी नहीं।
तो, निष्कर्ष में, यह वास्तव में निर्भर करता है कि आपको क्या करना है।
इसके अलावा, यह ध्यान रखें कि यदि आप X तत्वों द्वारा रचित एक enum है और
run some_predicate for Y
जहां वाई < एक्स, मिश्र धातु सभी में कोई उदाहरण का उत्पादन निष्पादित। तो, हमारे आखिरी उदाहरण में, हमारे पास वाई < 3.
अंतिम नोट के रूप में, यदि आप मैजिक लेआउट बटन का उपयोग करते हैं तो enums हमेशा विज़ुअलाइज़र में दिखाई नहीं देते हैं, लेकिन जैसा कि मैंने पहले कहा था enum पर अपने मॉडल "परियोजना" कर सकते हैं और enum के विभिन्न तत्वों के बीच स्विच कर सकते हैं।
धन्यवाद; यह सहायक है। मुझे लगता है कि यह एक ही नाम का उपयोग एक गणना में किया गया है और एक और गणना के नाम के रूप में एक त्रुटि होगी। (ठीक है, यह आसानी से चेक करने योग्य है, मैं क्यों पूछ रहा हूं कि मैं अपने लिए कब खोज सकता हूं? - हाँ, मिश्र धातु 4.2 आरसी इसे एक त्रुटि के रूप में झुकाता है। ठीक है, धन्यवाद।) –
मुझे यह भी लगता है कि 'निजी' http पर प्रलेखित है : //alloy.mit.edu/alloy/documentation/quickguide/private.html –