2008-12-23 3 views
5

फ्लेक्स में ArrayCollection पर .contains() का उपयोग करते समय, यह हमेशा स्मृति संदर्भ को देखेंगे। यह .equals() विधि या .toString() विधि या अतिदेय कुछ भी देखने के लिए प्रतीत नहीं होता है। इसके बजाय, मुझे हर बार ArrayCollection के माध्यम से लूप करने की आवश्यकता है और जब तक मैं जो खोज रहा हूं उसे प्राप्त करने तक प्रत्येक अलग-अलग आइटम की जांच करें।फ़्लेक्स की ArrayCollection की युक्त विधि मेमोरी संदर्भ को क्यों देखती है?

क्या किसी को पता है कि फ्लेक्स/एक्शनस्क्रिप्ट इस तरह क्यों बनाया गया था? लोगों को विधि का उपयोग करने के तरीके का उपयोग क्यों न करें?

+0

मैं अपने दर्द को साझा - मैं लगातार इच्छुक रहा है कि फ्लेक्स एक बराबर/getHashCode मॉडल में बनाया गया था –

उत्तर

2

ठीक है, ऐसा लगता है कि ऐरेकोलेक्शन वास्तव में स्मृति पर सीधे नहीं दिखता है, बल्कि केवल अंतिम उपाय के रूप में। यह ऑब्जेक्ट के लिए एक अद्वितीय आईडी (यूआईडी) खोजने का प्रयास करेगा। यदि यूआईडी मौजूद नहीं है, तो यह UIDUtil.as का उपयोग करके इसके लिए एक बना देगा।

आप ऑब्जेक्ट के लिए आईयूआईडी इंटरफेस को लागू करने और ऑब्जेक्ट के लिए अपना यूआईडी प्रदान करके इस संपूर्ण डिफ़ॉल्ट यूआईडी सामग्री के आसपास हो सकते हैं। ArrayCollection आपके द्वारा प्रदान किए गए यूआईडी को देखेगा।

+3

क्षमा करें, कि एक नकारात्मक है।। मुझे नहीं पता कि आप किन स्रोतों को देख रहे हैं, लेकिन 3.2 से अधिक लोग "==" का उपयोग करते हैं, यदि फ़िल्टर फ़िल्टर किया गया है और ArrayUtil.getItemIndex ("===") अगर ArrayCollection सॉर्ट नहीं किया गया है तो आइटम को ढूंढने के लिए। अगर इसे हल किया जाता है तो यह अधिक जटिल हो जाता है लेकिन अभी भी कोई यूआईडी जांच नहीं है। –

+1

-1: बस आईयूआईडी इंटरफेस के प्रस्तावित उपयोग की कोशिश की, लेकिन लागू विधियों को कभी नहीं बुलाया गया ... दुर्भाग्य से ... हालांकि यह एक अच्छी सुविधा होगी। – Matyas

2

क्या आप केवल ArrayCollection का विस्तार नहीं कर सकते हैं और इसमें() विधि को ओवरराइड नहीं कर सकते? वैकल्पिक रूप से आप अपने प्रोजेक्ट में "mx/संग्रह" पैकेज में ArrayCollection के स्रोत को पेस्ट कर सकते हैं और स्रोत को संशोधित कर सकते हैं; यह "बंदर-पैचिंग तकनीक" आपके पूरे प्रोजेक्ट में व्यवहार को ओवरराइड कर देगी। हालांकि मैं इस तरह से ऐरेकोलेक्शन को बदलने के बारे में बेहद सतर्क रहूंगा: चूंकि इसका उपयोग फ्लेक्स एपीआई में पूरे स्थान पर किया जाता है, इसलिए एक अच्छा मौका है कि आप ढांचे में अन्य घटकों को तोड़ना शुरू कर देंगे।

2

संदर्भ() विधि संदर्भ में सही है (सही है) मैं प्राइमेटिव्स के लिए भी विश्वास करता हूं, इसलिए यदि आप एक स्ट्रिंग या एक इंरे कोलेक्शन में int खोजने की कोशिश कर रहे हैं, तो आपको स्वयं को खोजना होगा लूपिंग या खोज के कुछ बदलाव। मुझे नहीं लगता कि हम में से कोई भी आपको बता सकता है कि उस विधि पर एक वैकल्पिक पैरामीटर क्यों नहीं है, यह बताता है कि रेफरी या वैल द्वारा खोजना है या नहीं; तो यह कहता है, जैसा कि वे कहते हैं।

लेकिन मैं आपको निश्चित रूप से फ्रेमवर्क कोड को बंदर-पैचिंग से चेतावनी दूंगा - यह केवल परेशानी के लिए पूछ रहा है। :)

0

मैं एक सरल सुझाव है:

in_array($haystack, $arrayCollection->toArray()); 
संबंधित मुद्दे