2014-06-30 8 views
5

यहाँ एक उदाहरण से कोड है: के रूप में मैं एक जावा पृष्ठभूमि से आते हैं ... मैं लेने के लिए कोशिश कर रहा हूँ,स्काला स्प्रे रूटिंग सिंटेक्स

import spray.routing.SimpleRoutingApp 

object Main extends App with SimpleRoutingApp { 

     implicit val system = ActorSystem("my-system") 

     startServer(interface = "localhost", port = 8080) { 
      path("hello") { 
        get { 
        complete { 
         <h1>Say hello to spray</h1> 
        } 
       } 
      } 
     } 
} 

http://spray.io/documentation/1.1-SNAPSHOT/spray-routing/#spray-routing

पर मिले कृपया मेरे noobiness माफ स्कैला भाषा के साथ-साथ एक ही समय में इस ढांचे को। मैं अर्थात् समझ रहा हूं कि यहां क्या हो रहा है, लेकिन वाक्य रचनात्मक रूप से मैं बहुत उलझन में हूं।

मैं समझना चाहता हूं कि स्कैला भाषा में कौन सी संरचनाएं लागू की जाती हैं, विशेष रूप से कॉल से "स्टार्टसेवर" और {} के बीच कार्यान्वयन से शुरू होती है। इस तरह मैं इसे Google कर सकता हूं और इसे खोज सकता हूं ... लेकिन मुझे यकीन नहीं है कि यहां क्या देखना है। मुझे लगता है कि यह भाषा में कुछ कार्यात्मक अवधारणाओं से संबंधित हो सकता है।

"स्टार्टसेवर" SimpleRoutingApp का एक तरीका प्रतीत होता है, लेकिन ऐसा लगता है कि आप अपने शरीर में नेस्टेड फ़ंक्शंस में गुज़र रहे हैं, यानी "पथ", "प्राप्त करें", "पूर्ण" ... यह वास्तव में कैसे काम करता है ? पूरी सहायताके लिए शुक्रिया।

उत्तर

7

स्प्रे सीखना सबसे आसान बात नहीं है, खासकर जब आपने स्कैला के साथ शुरुआत की, लेकिन मैं समझाने की कोशिश करूंगा।

सबसे पहले आपको समझने की आवश्यकता है currying। दो शब्दों में करीबी फ़ंक्शन एक फ़ंक्शन है जो एक और फ़ंक्शन देता है। तो startServer एक curried समारोह का एक अच्छा उदाहरण है, यहाँ पर यह संक्षिप्त रूप का हस्ताक्षर:

def startServer(interface: String, port: Int)(route: ⇒ Route): Future[Http.Bound] 

यह एक तरीका है एक curried समारोह की घोषणा करने के लिए है, startServer एक मेजबान और एक बंदरगाह, फिर "वापसी" एक समारोह जो लेता है लेता है अपने सेवा route और Http.Bound के साथ भविष्य लौटाता है। स्कैला में अगली चाल की अनुमति है, यह है कि आप लिख सकते हैंजैसे घुंघराले ब्रेसिज़ में, और इसका उपयोग startServer में किया जाता है, पहली तर्क सूची में दो आवश्यक पैरामीटर होते हैं, इसलिए आप {} शैली का उपयोग नहीं कर सकते (), लेकिन जब आप host:port पास करते हैं, तो आपके पास Route => Future[Http.Bound] फ़ंक्शन है, इसलिए आप इस शैली को लागू कर सकते हैं। और इस नियम को आगे लागू किया जा सकता है (path, get, complete के साथ)।

आप के अंदर है क्या, यानी

path("hello") { 
    get { 
     complete { 
      <h1>Say hello to spray</h1> 
     } 
    } 
} 

अपने वास्तविक सेवा Route है। इसमें directives कहा जाता है, जो एचएलआईस्ट के आकारहीन कार्यान्वयन पर आधारित होते हैं (मैं इसे यहां समझाऊंगा नहीं, लेकिन आप वहां जानकारी प्राप्त कर सकते हैं)। आम तौर पर प्रत्येक निर्देश एक ऐसा कार्य होता है जो उपयोगकर्ता HttpRequest (मूल रूप से RequestContext) के साथ कुछ करता है। सभी निर्देशों के लिए विवरण here पाया जा सकता है।

+0

मदद के लिए धन्यवाद! क्या आप मुझे उस वाक्य रचनात्मक चीनी पर कुछ दस्तावेज बता सकते हैं जिसमें एक तर्क सूची विधि को {} के बजाय {} के साथ लागू किया जा सकता है? धन्यवाद! – HiChews123

+1

@ एसीएसपीडी 7 [स्कैला बुक से] (http://books.google.ru/books?id=MFjNhTjeQKkC&pg=PA171&lpg=PA171&dq=Scala+one+arg+list+curly+braces&source=bl&ots=FMli-HHKvu&sig=-tX8a0dLvpaRxp_CSX6D4y11KvY&hl= आरयू और सा = एक्स और Ei = NZi9U6iVCsG8ygOPtoLQBA और वेद = 0CEgQ6AEwBA # v = onepage & q = स्काला% 20one% 20arg% 20list% 20curly% 20braces & f = गलत) – 4lex1v