2012-02-01 23 views
5

में वैरिएबल के चरम पर स्वचालित पहुंच।<a href="http://www.yesodweb.com/book/templates">Yesod Book</a> से स्कोप

हैमलेट को स्वचालित रूप से स्कोप में चर के चर तक पहुंच होती है जब इसे कहा जाता है। विशेष रूप से चर को पास करने की कोई आवश्यकता नहीं है।

यह गहरा जादू क्या है? यह स्वचालित रूप से कैसे पता चलेगा कि चर के दायरे क्या हैं?

+0

जबकि मुझे कुछ भी पता नहीं है, शायद यह टेम्पलेट हैकेल है। बेशक (मेरे लिए) टेम्पलेट हैकेल गहरी जादू है, इसलिए आप वहां जाते हैं :) एक ही चीज़ का एक सरल उदाहरण क्विक चेक की क्विक चेक है: यह जादूगर रूप से आपके सभी प्रोप * बाइंडिंग के बारे में जानता है और उन्हें चलाता है। –

उत्तर

9

हैमलेट Template Haskell पर आधारित है; विशेष रूप से, quasiquoter (यानी [hamlet| ... |]) इनलाइन टेम्पलेट्स के लिए उपयोग किया जाता है, और एक विभाजन (यानी $(hamletFile "foo")) फ़ाइल से टेम्पलेट बनाने के लिए उपयोग किया जाता है। चर को तब टेम्पलेट हास्केल की आत्मनिरीक्षण सुविधाओं के साथ एक्सेस किया जाता है।

  • जिसके परिणामस्वरूप टेम्पलेट्स संभावना पार्स और रनटाइम पर व्याख्या की है, क्योंकि हेमलेट टेम्पलेट्स संकलन समय पर नियमित रूप से हास्केल कोड को संकलित किया गया है की तुलना में अधिक कुशल हैं:

    इस चर के लिए स्वत: पहुंच की अनुमति देते परे फायदे हैं।

  • फ़ाइल से टेम्पलेट पढ़ने पर, फ़ाइल को संकलित समय पर पार्स किया जाता है और परिणामस्वरूप बाइनरी में एम्बेड किया जाता है, इसलिए टेम्पलेट को रनटाइम पर उसी स्थान पर चारों ओर रखने की आवश्यकता नहीं होती है, और इसकी वैधता टेम्पलेट स्थिर रूप से सुनिश्चित किया जाता है।

मेरा मानना ​​है कि इन फायदों सभी Shakespeare -family टेम्पलेट्स के लिए लागू होते हैं। The Haddock documentation में उपलब्ध quasiquoters और splices पर अधिक जानकारी है।

+0

ऊपर हैडॉक लिंक टूटा हुआ है, लेकिन ये सही दिशा में इंगित कर सकते हैं: http://www.haskell.org/haskellwiki/Template_Haskell#Template_Haskell_tutorials_and_papers –

4

यह हास्केल के quasiquotation की एक विशेषता है, जो [xxx| .... |] वाक्यविन्यास है।

क्वासिकोटर किसी भी चर को एक्सेस कर सकता है जो कि दायरे में है, इसलिए उन्हें अलग किया जा सकता है। इंटरपोलेशन (यदि कोई हो) का वास्तविक कार्यान्वयन क्वासिकोटर पर निर्भर करता है।