2008-10-16 17 views
5

'var: *' के लिए खोजना थोड़ा मुश्किल है क्योंकि अधिकांश खोज इंजन इसे नहीं ढूंढ पाएंगे।वर्कस्क्रिप्ट में var x: * का क्या अर्थ है?

मैं स्पष्ट नहीं कर रहा हूँ वास्तव में क्या var: * इसका मतलब है, का कहना है की तुलना में वर: ऑब्जेक्ट

मैंने सोचा कि यह मेरे जैसे एक वस्तु पर मनमाने ढंग से गुण सेट करते हैं:

var x:* = myObject; 
x.nonExistantProperty = "123"; 

लेकिन इस देता है मुझे एक त्रुटि:

Property nonExistantProperty not found on x 

* वास्तव में क्या मतलब है?

संपादित करें: मैंने मूल var: * को सही var x: * पर तय किया है। मेरा इंटरनेट कनेक्शन खो गया

उत्तर

1

यह "untyped" प्रकार है। इसका मतलब यह है कि चर किसी भी प्रकार का हो सकता है। मूल रूप से इस का उपयोग कर के रूप में एक ही प्रभाव:

var x = myObject; 
1

इसका मतलब है कि प्रकार निर्दिष्ट नहीं है और किसी भी प्रकार के साथ प्रयोग किया जा सकता है। हालांकि, आप उस पर यादृच्छिक गुण सेट नहीं कर सकते हैं। यह आपके द्वारा सेट किए गए किसी भी प्रकार की तरह व्यवहार करेगा। सटीक सिंटैक्स है:

var x:*; 
2

यह एक untyped चर को निर्दिष्ट ताकि आप मूल रूप से इसे करने के लिए किसी भी प्रकार प्रदान कर सकते हैं का एक तरीका है। कोड

var x:* = oneTypeObject; 

वैरिएबल एक्स बनाता है तो oneTypeObject वैरिएबल को असाइन करता है। साथ ही आप इस प्रकार के रूप में यह करने के लिए एक बिल्कुल अलग प्रकार प्रदान कर सकते हैं:

var x:* = anotherTypeObject; 

गुण हालांकि, अगर आप अभी भी मनमाने ढंग से निर्धारित नहीं कर सकते या पहुँच; उन्हें अंतर्निहित प्रकार में मौजूद होना चाहिए (या तो oneTypeObject या anotherTypeObject)।

दोनों प्रकारों में समान रूप से नामित गुण हो सकते हैं जिसका अर्थ है कि आप अंतर्निहित प्रकार के साथ स्वयं को चिंता किए बिना x में उस संपत्ति को एक्सेस या सेट कर सकते हैं।

12

अन्य उत्तरों पर विस्तार, प्रकार तारांकन के साथ कुछ घोषित करना बिल्कुल समानता छोड़ने जैसा ही है।

var x:* = {}; 
var y = {}; // equivalent 

हालांकि, अगर आप वस्तुओं के लिए गैर existant गुण आवंटित करने के लिए अनुमति है या नहीं के सवाल संदर्भ के प्रकार के साथ कोई संबंध नहीं है, और चाहे या नहीं वस्तु एक गतिशील का एक उदाहरण है से निर्धारित होता है कक्षा।

उदाहरण के लिए, के बाद से वस्तु गतिशील है और स्ट्रिंग नहीं है:

var o:Object = {}; 
o.foo = 1; // fine 
var a:* = o; 
a.bar = 1; // again, fine 

var s:String = ""; 
s.foo = 1; // compile-time error 
var b:* = s; 
b.bar = 1; // run-time error 

नोट कैसे आप हमेशा की तरह, वस्तु के लिए नए गुणों असाइन कर सकते हैं संदर्भ आप किस तरह का उपयोग की परवाह किए बिना। इसी प्रकार, आप स्ट्रिंग को कभी भी नई प्रॉपर्टी असाइन नहीं कर सकते हैं, लेकिन यदि आप टाइप किए गए संदर्भ का उपयोग करते हैं तो यह कंपाइलर द्वारा पकड़ा जाएगा, और एक untyped संदर्भ के साथ संकलक को पता नहीं है कि b गतिशील है या नहीं, तो त्रुटि होती है चलने के समय पर।

संयोग से, पर टाइप तारांकन डॉक संदर्भ यहां पाया जा सकता:

http://livedocs.adobe.com/labs/air/1/aslr/specialTypes.html# *

(। मार्कअप इंजन तारांकन की वजह से, कि linkify लिए मना कर दिया)

0

जैसा कि उन्होंने पहले कहा था, यह untyped है, तो यह किसी भी प्रकार का डेटा हो सकता है। हालांकि, आप इसे संचालन में इस तरह से इलाज नहीं कर सकते हैं। उदाहरण के लिए, इस मान्य कोड है:

var untyped:* = functionThatReturnsSomeValue(); 

लेकिन अगर आप एक कदम आगे जाना है, तो आप बाहर देखने के लिए है या आप काट लिया हो सकता है:

var name:String = untyped.name; 

अब, अगर उद्देश्य यह है कि समारोह से वापस लौटे "नाम" की आईडी वाले फ़ील्ड के साथ एक ऑब्जेक्ट होता है, आप स्पष्ट रूप से हैं। हालांकि, जब तक कि आप यह सुनिश्चित न करें कि यह मामला है, टाइप की गई वस्तुओं का उपयोग करना बेहतर है। इस तरह, संकलक आपको सतर्क करेगा यदि आप कुछ ऐसा करते हैं जो रनटाइम पर त्रुटि डाल सकता है:

(elsewhere) 
public class TypedObject() 
{ 
    public var name:String = ""; 
} 

(and the code at hand) 
var typed:TypedObject = functionThatReturnsTypedObject(); 
var name:String = typed.name; 
संबंधित मुद्दे