2012-02-10 4 views
8

मैं अभिव्यक्तियों के लिए स्कैला कंपाइलर द्वारा अनुमानित प्रकारों को कैसे देख सकता हूं? मेरे पास जटिल प्रकार अनुमान और निहित रूपांतरण के साथ कुछ कोड है, और यह देखना मुश्किल है कि कोड पढ़कर क्या हो रहा है।अनुमानित प्रकार के स्काला अभिव्यक्तियों को दिखा रहा है

मैं

scalacOptions in Compile += "-Xprint-types" 
build.sbt में

जोड़ने की कोशिश की है, लेकिन यह कोई प्रभाव नहीं है।

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

मैं कोड लिखने के लिए ग्रहण स्कैला प्लगइन और ENSIME का उपयोग करता हूं, और एसबीटी बनाने के लिए।

उत्तर

2

यह सटीक सुविधा ग्रहण स्काला आईडीई 3.0 में जोड़ा गया है!

कोड के किसी भी भाग का चयन करें और अनुमानित प्रकार को देखने के लिए Ctrl-Shift-W T (Mac पर Cmd द्वारा Ctrl को प्रतिस्थापित करें) दबाएं।

4

यह

scalacOptions in Compile ++= Seq("-Xprint-types", "-Xprint:typer") 
बजाय

की जरूरत है।

दुर्भाग्यवश आउटपुट बहुत पठनीय नहीं है। :(

0

लहरा एक गैर-स्थानीय def या val, एक स्पष्ट प्रकार के बिना करने के लिए अभिव्यक्ति -। तो यह ग्रहण में रेखांकित ध्यान में रखते हुए, सौंपा किसी अनुमानित प्रकार के साथ दिखाई देंगे

बहरहाल, यह नहीं है एक आदर्श समाधान क्योंकि इसे कुछ काम की आवश्यकता होती है, और इसका उपयोग तब नहीं किया जा सकता जब रिकर्सन शामिल होता है।

0

मैं इस मुद्दे पर एक प्रश्न तैयार कर रहा था। शायद यह सबसे अच्छा है कि मैं इसे यहां पेस्ट करता हूं (कृपया मुझे ज्वाला न करें इसके लिए उत्तर नहीं है ..)

मैंने रॉबिन ग्रीन के समाधान की कोशिश की, लेकिन (जैसा कि आप जानते हैं) यह आवश्यकतानुसार अधिक आउटपुट देता है।

यहाँ जाता है:

स्काला के लिए नए होने के नाते, और अनुमानित प्रकार तंत्र, मुझे लगता है कि यह अक्सर इस तरह कुछ करने के लिए सक्षम होने के लिए फायदेमंद हो सकता है:

@spitType s= something 
... 

काल्पनिक spitType एक संकलन-समय मैक्रो (सी ++ में #pragma warning के समान) की तरह होगा जो संकलन समय पर अभिव्यक्ति की प्रकार की जानकारी थूक देगा।

मुझे पता है कि मैं रनटाइम पर ऐसी जानकारी प्राप्त करने में सक्षम हूं, लेकिन ऐसे मामलों में जहां शेष कोड अभी तक संकलित नहीं होता है, एक संकलन-समय संदेश केवल उपयोगी चीज होगी।

क्या आपको ऐसी क्षमता उपयोगी, या केवल अप्रासंगिक मिलेगी?

+1

हे, इस तरह से मिला। एक परिवर्तनीय एसए बनाओ 'वैल xxx: कुछ भी नहीं' और अभिव्यक्ति के साथ असाइन करें जिसका प्रकार आप जानना चाहते हैं। हमेशा कुछ त्रुटि उत्पन्न नहीं होगी क्योंकि 'कुछ भी नहीं' से कोई भी प्रकार नहीं निकलता है। :) – akauppi

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