2012-09-06 11 views
8

मेरे पास बहुत सारे बॉयलरप्लेट के साथ एक प्रोग्राम है (जो दुख की बात है, स्कैला तंत्र द्वारा भी कम नहीं किया जा सकता है)। लेकिन यदि मैक्रो के साथ जटिल शीर्ष-स्तरीय कक्षाएं उत्पन्न करने का कोई तरीका होगा, तो वह बॉयलरप्लेट दूर जाएगा। उदाहरण के लिए:स्कैला 2.10 में एक मैक्रो आमंत्रण के साथ कई शीर्ष-स्तरीय कक्षाएं उत्पन्न करना संभव होगा?

package org.smth 

generate(params) 

// becomes 

class A { ... } 
object B { ... } 
case class C { ... } 

स्कैला 2.10 मैक्रोज़ के साथ यह संभव होगा?

उत्तर

7

संक्षेप में: नहीं।

Macro types (यानी मैक्रोज़ जो विधियों के बजाय प्रकार उत्पन्न करते हैं) की योजना बनाई गई है, लेकिन वे डिज़ाइन नहीं किए गए हैं और न ही निर्दिष्ट हैं, अभी तक अकेले लागू किए गए हैं, और वे 2.10 के लिए नहीं होंगे।

इसके अलावा, एक एकल मैक्रो आमंत्रण केवल एक ही प्रकार उत्पन्न कर सकता है। हालांकि, चूंकि प्रकार (विशेष रूप से, object एस) घोंसला जा सकता है, यह एक सीमा नहीं है: आप केवल एक शीर्ष-स्तर object उत्पन्न कर सकते हैं जिसमें आपको आवश्यक सभी कक्षाएं शामिल हैं। इस और अपने कोड के बीच अंतर मूल रूप से एक अतिरिक्त import कथन है:

package org.smth 

type O = Generate(params) 

// becomes 

object O { 
    class A { ... } 
    object B { ... } 
    case class C { ... } 
} 

// which means you need an additional 

import O._ 

वे package के बारे में मैक्रोज़ वर्गों से भरा पूरे संकुल उत्पन्न कर सकते हैं सोचा है, लेकिन महसूस किया कि जब से object रों package और प्रकार मैक्रो का सुपरसेट हैं object एस उत्पन्न कर सकता है जो आवश्यक नहीं होगा।

+1

लेकिन क्या अब विधि मैक्रोज़ में आंतरिक कक्षाएं उत्पन्न करना संभव है? 'वैल ए = {कक्षा ए {...} की तरह; नया ए smth} '? – Rogach

+2

हां यह संभव है, लेकिन स्थानीय वर्गों को वैश्विक प्रतीक तालिका में पंजीकृत होने की आवश्यकता नहीं है, इसलिए यह आसान है। –

+1

कोई कोड उदाहरण/जिस्ट? – ZiglioUK

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