2013-03-13 6 views
24

मेरे पास एक सहयोगी ऑपरेशन >> है। समस्या यह है कि इसकी लागत रैखिक रूप से अपने बाएं ऑपरेंड के आकार पर निर्भर करती है। तो एक अभिव्यक्तिदाएं-सहयोगी इंफिक्स ऑपरेटर कैसे बनाएं?

a >> a >> a >> a >> a >> ... >> a 

यह n के मामले में द्विघात लागत है की तरह >> की n आवेदनों की एक अनुक्रम द्वारा गठित है, क्योंकि डिफ़ॉल्ट रूप से इन्फ़िक्स ऑपरेटरों left-associative हैं। इसे सही-सहयोगी बनाने के लिए कैसे करें ताकि ऐसी अभिव्यक्ति की लागत n के संदर्भ में रैखिक रखा जा सके?

+0

मुझे पता है कि सामान्य उत्तर में सामान्य रूप से प्रोत्साहित किया जाता है। क्या यह एक ही समय में प्रश्न और उत्तर दोनों पोस्ट करने के लिए भी लागू होता है? मैं एक उत्तर पोस्ट करने वाला था लेकिन चूंकि आपके पास एक बेहतर उत्तर तैयार था, यह समय बर्बाद था। आपके प्रश्न और उत्तर दोनों बहुत अच्छी तरह से लिखे गए हैं, लेकिन यह किसी भी तरह से एक प्रसिद्ध तथ्य को प्रतिष्ठा में बदलने की छाप छोड़ देता है? फिर भी, वाक्यांश * मुझे महसूस करने के लिए कुछ समय लगा ... * विडंबना का एक अच्छा स्पर्श जोड़ता है :)। – bluenote10

+2

@ bluenote10 मैंने बिना किसी जवाब के SO खोजा, इसलिए मैंने सवाल लिखने का फैसला किया। मैंने इसे लगभग तैयार किया था, लेकिन मैं हिचकिचाहट और समाधान खोजने की कोशिश करने के लिए थोड़ा और खोजने की कोशिश की। मुझे ':' का उपयोग करने के बारे में कुछ टिप्पणी मिली और मुझे अंततः स्कैला के संदर्भ में समाधान मिला और इसे मेरे मामले के लिए काम किया। सवाल को त्यागने के लिए थोड़ा कचरा लग रहा था और परिणामों को साझा नहीं किया, इसलिए मैंने दोनों (एक ही समय में) पोस्ट किया। –

+0

मैं पूरी तरह से आपसे सहमत हूं कि यह एसओ (दोनों को ऊपर उठाया गया) के लिए मूल्य जोड़ता है। मैं सिर्फ यह जानना चाहता था कि यह आधिकारिक तौर पर प्रोत्साहित किया गया है क्योंकि यह मानते हुए उपयोगकर्ताओं को थोड़ा परेशान हो सकता है कि ओपी वास्तव में एक उत्तर खोज रहा है। उस पर कोई आधिकारिक जानकारी नहीं मिली। – bluenote10

उत्तर

42

ए को एक समाधान मिला। स्काला संदर्भ 6.12.3 इन्फ़िक्स संचालन में कहते हैं:

संबद्धता एक ऑपरेटर की ऑपरेटर के अंतिम चरित्र से निर्धारित होता है। ऑपरेटर एक कोलन में समाप्त '' 'सही-सहयोगी हैं। अन्य सभी ऑपरेटर बाएं-सहयोगी हैं।

इसलिए >> से >>: का नाम बदलने के लिए पर्याप्त था।

यह मुझे कुछ समय लगा एहसास है कि जबकि a >> ba.>>(b) में desugared है, a >>: bb.>>:(a) में desugared है। तो मुझे >>: को

def >>:(x: T): T = x >> this 
संबंधित मुद्दे