2010-10-05 17 views
12

मैं डोमेन विशिष्ट भाषाओं पर कुछ किताबें और संसाधन देख रहा हूं। मुझे लगता है कि मैं स्कैला में एक आंतरिक डीएसएल बनाना चाहता हूं।स्कैला में एक आंतरिक डीएसएल कैसे बनाएं?

def instrument = new FXInstrument { 

    provider = "EuroBase" 
    instrumentOrders = List(
     new FXOrder { 
      baseCcy = "GBP" 
      termCcy = "EUR" 
      legs = List( 
       new FXLeg { 
        amountPrice = 100000.0 
        spotPrice = 1.56 
        requirements = List(
         new FXRequirement { 
          baseCcy="GBP" termCcy="EUR" 
          settlement="Banker Rain" 
         } 
        ) 
       }, 
       new FXLeg { 
        amountPrice = 200000.0 
        spotPrice = 1.50 
        requirements = List(
         new FXRequirement { 
          baseCcy="GBP" termCcy="EUR" 
          settlement="Banker Sunny" 
         } 
        ) 
       } 
      ) 

     }     
} 

इस तरह की है कि निम्न दावा मान्य हैं:

instrument.orders(0).baseCcy should equal ("GBP") 
instrument.orders(0).termCcy should equal ("EUR") 
instrument.orders(0).legs(0).amountPrice should equal 100000.0 
instrument.orders(0).legs(0).spotPrice should equal 1.56 
instrument.orders(0).legs(1).amountPrice should equal 200000.0 
instrument.orders(0).legs(1).spotPrice should equal 1.50 
instrument.orders(0).legs(0).requirements(0).settlement should equal "Banker Rain" 
instrument.orders(0).legs(1).requirements(0).settlement should equal "Banker Sunny" 

मैं बस नहीं जानता कि काफी कैसे एक आंतरिक प्रतिनिधित्व

1) नई FXOrder() {डोमेन विशिष्ट भाषा को लागू करने/बंद /}

मुझे यह वाक्यविन्यास पसंद है, क्या यह अच्छा है या मुझे साथी वस्तुओं को प्राथमिकता देना चाहिए। उदाहरण के लिए मैं जल्दी से अन्य एफएक्स प्रकारों को आसानी से पेश कर सकता हूं।

2) मैं "साथियों" इस तरह के FXOrder उपयोग करना चाहते हैं, एक scala.Proxy mixee है इस प्रकार यह का उपयोग करता है विशेषता प्रॉक्सी (mixin)

उदाहरण के लिए `` instrument.peer '' आंतरिक सहकर्मी जावा वस्तु देता है तीसरे पक्ष के मालिकाना एपीआई के लिए (एक प्रसिद्ध वित्तीय सेवा व्यापार प्रणाली, आप अनुमान लगा सकते हैं?)

डिट्टो

instrument.orders (0) .peer instrument.orders (0) .legs (0) .peer instrument.orders (0) .legs (0) .requirements (0) .peer

और इसी तरह से।

मुझे एहसास है कि डोमेन विशिष्ट भाषा उतनी सरल नहीं है जितनी मैंने सोचा था, हालांकि ऊपर दिए गए कुछ पॉइंटर्स वास्तव में उपयोगी होंगे। मैं आपकी प्रतिक्रियाओं की सराहना करता हूं। टा!

पीपी

+1

आप http://programming-scala.labs.oreilly.com/ch11.html#InternalDSLs –

उत्तर

6

हो सकता है, यह आपकी मदद कर सकते हैं: DSL in Scala

+0

पर एक नज़र डाल सकते हैं यह लिंक टूटा हुआ है। :( – Kao

+0

https://www.amazon.com/Programming-Scala-Scalability- कार्यात्मक- ऑब्जेक्ट्स/डीपी/05 9155956%3FSubscriptionId%3DAKIAILSHYYTFIVPWUY6Q%26tag%3Dduckduckgo-d-20%26linkCode%3Dxm2%26camp%3D2025%26creative%3D165953 % 26creativeASIN% 3D0596155956 – adrian

5

मैं नहीं माना जाता है कि आपने अभी तक क्या चाहते हैं, लेकिन मैं एक समस्या देखा:

1) नई FXOrder () {/ बंद /}

नहीं, यह इस तरह से काम नहीं करता है। जब आप किसी ब्लॉक के साथ प्रारंभिकरण (new Something) का पालन करते हैं, तो आप अज्ञात सबक्लासिंग कर रहे हैं। आप वास्तव में क्या कर रहे हैं new FXOrder() { /constructor, methods, getters and setters/ } है।

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