2011-01-02 10 views
18

यह एक प्रसिद्ध तथ्य है कि संरचनात्मक प्रकार प्रतिबिंब के माध्यम से लागू किए जाते हैं। क्या कोई अन्य भाषा संरचनाएं हैं जो प्रतिबिंब का उपयोग करती हैं?प्रतिबिंब का उपयोग कर कौन सा स्कैला विशेषताएं आंतरिक रूप से कार्यान्वित की जाती हैं?

+0

आप सभी अपने जवाब के लिए धन्यवाद! मुझे सच में यकीन नहीं है कि इस बिंदु पर क्या करना है। इस मामले में एक को स्वीकार करना उचित नहीं होगा, लेकिन उनमें से कई को स्वीकार करना भी संभव नहीं है। –

+0

अज्ञात वस्तुओं के बारे में एक को स्वीकार करें क्योंकि यह केवल एकमात्र है (सामान्य रूप से संरचनात्मक प्रकारों से अलग) जहां प्रतिबिंब आपको गंभीर प्रदर्शन परेशानी में डाल सकता है। (हो सकता है कि यह सिर्फ मुझे है, लेकिन मैं एक स्वीकृत जवाब के बिना मेरे प्रश्नों में से एक नहीं छोड़ सकते।) –

उत्तर

15

यह बारीकी से संरचनात्मक प्रकार से संबंधित है, लेकिन किसी भी गुमनाम वस्तु दृष्टान्त, यानी

new { def print = ("hello world") }.print 

प्रतिबिंब का उपयोग करेगा।

http://scala-programming-language.1934581.n4.nabble.com/Structural-types-reflection-td3071599.html

+4

+1: अंतर्निहित रूपांतरणों को परिभाषित करते समय इसका प्रभाव पड़ता है, इसलिए यह अलग-अलग इंगित करने योग्य है। संक्षेप में, हमेशा 'implicit' फ़ंक्शन के बाहर * नामित * कक्षा को परिभाषित करें, और उस वर्ग में कनवर्ट करने के लिए * * अलग * निहित फ़ंक्शन को परिभाषित करें। –

+0

यह वही है जो मैं करता हूं जब मैं कक्षा में एक विधि जोड़ने के लिए एक अंतर्निहित रूपांतरण परिभाषित करता हूं। – Russell

5

अगर आप समझते हैं isInstanceOf/asInstanceOf के रूप में प्रतिबिंब है, तो पैटर्न मिलान उन्हें

+1

प्रतिबिंब नहीं है यही कारण है, कि जाँच और कास्टिंग टाइप है और बहुत तेजी से है। – vadipp

+0

@vadipp - हाँ, लगता है कि हम इसका इस्तेमाल करने के डर नहीं होना चाहिए कि हम ऐसा करने के लिए झुका रहे हैं जब भी: http://stackoverflow.com/questions/103564/the-performance-impact-of-using-instanceof-in- जावा – bbarker

1

पर निर्भर करता है यह एक भाषा निर्माण नहीं है, लेकिन ScalaTest Suite.execute जो खोजने के लिए और परीक्षण तरीकों को लागू करने की प्रतिबिंब का उपयोग करता है शामिल हैं।

स्काला के pattern matching उपयोग पर्दे के पीछे किसी भी प्रतिबिंब है? संरचनात्मक प्रकार में

+0

अफैइक, पैटर्न मिलान केवल प्रकार की जांच, प्रकार कास्टिंग और 'अनुपयोगी' विधियों का उपयोग करता है। मानक लाइब्रेरी कक्षाओं के लिए संकलक मूल जेवीएम स्विच भी उत्पन्न कर सकता है, 'if-else' constructs और ऐसे। यहां प्रतिबिंब की आवश्यकता नहीं है। – vadipp

+0

_ क्या है_ प्रकार की जांच, वास्तव में? – matanster

5

विधि मंगलाचरण प्रतिबिंब पर निर्भर करता है:

type T = { def startsWith(x:String):Boolean } 
def doSomethingWith(x:T) = x.startsWith("abc") 
doSomethingWith("abcdef") 
+2

ओपी ने विशेष रूप से संरचनात्मक प्रकारों का उल्लेख किया और अन्य उदाहरणों के लिए कहा। –

+0

@ पेलोटॉम: नोटिस ओपी भी केन ब्लूम है। – IttayD

+0

@IttayD: हुह? ओपी @ नर्मिन सेरिफोविक –

10

Enumerations nameOf समारोह के लिए गणन के लिए के बारे में सभी संभव मूल्यों का पता लगाने के लिए प्रतिबिंब का उपयोग करें। (विधि Enumeration.scala में देखें)। यह एक बार एक विशेष Enumeration प्रकार के लिए किया जाता है, पहली बार जब आप nameOf कहते हैं।

2

स्काला दुभाषिया प्रतिबिंब के बहुत भारी उपयोग करता है।

संबंधित मुद्दे