2012-05-08 4 views
17

उनके डॉक से एक क्लासिक हैलो दुनिया उदाहरण,रैक प्रतिक्रिया शरीर एक सरणी क्यों नहीं है?

class HelloWorld 
    def call(env) 
    return [200, {}, ["Hello world!"]] 
    end 
end 

मेरे सवाल क्यों तिहाई मूल्य है "[नमस्ते दुनिया!"], नहीं "हैलो दुनिया? उनके दस्तावेज़ में

शारीरिक प्रत्येक का जवाब देना होगा और केवल स्ट्रिंग मान उपज चाहिए। शरीर ही है, स्ट्रिंग का एक उदाहरण नहीं होना चाहिए क्योंकि इस में टूट जाएगा रूबी 1.9।

क्यों शरीर की जरूरत है प्रत्येक को जवाब देने के लिए? और किस मामले में इससे कोई फर्क पड़ता है?

+0

मुझे लगता है कि इसे बफर किया जा सकता है और फिर किसी भी व्यक्ति से अनुरोध किए जाने वाले हिस्सों में भेज दिया जा सकता है। प्रतिक्रिया काफी बड़ी हो सकती है ताकि सर्वर इसे "स्ट्रीम" कर सकें। क्या आपका प्रश्न शरीर पर पूरे पुनरावृत्ति के अलावा रूबी 1.9 के बारे में खंड के लिए अधिक विशिष्ट है? –

+0

यह भी समझ में आता है कि जब आप सी दुनिया में भेजते हैं() और recv() कैसे काम करते हैं। जब आप आरईवी कहते हैं तो आप इसे वर्णों के बफर को एक पता देते हैं जो इसे भरता है। आप पूरे शरीर को एक कॉल में नहीं लेना सुनिश्चित कर रहे हैं। जब आप पात्रों की श्रृंखला भेजते हैं तो वही सच होता है। – nickethier

उत्तर

8

मुझे लगता है कि रैक की उत्पत्ति पाइथन की wsgi पर हुई थी। यहाँ अजगर के लिए विवरण है: http://www.python.org/dev/peps/pep-3333/#buffering-and-streaming

+1

सही। और जब आपके घटक में आप चिपकते हैं तो तारों की पूर्व-निर्मित सरणी भेजने से कुछ और होता है, तो रैक आपको 'प्रत्येक' के जवाब में भाग में अपनी प्रगति की रिपोर्ट करने के लिए एक अच्छा 'गणना करने योग्य' अनुबंध देता है। हालांकि यह एक हेलो वर्ल्ड उदाहरण के लिए मूर्खतापूर्ण दिख सकता है, यह कुछ और वास्तविक के साथ और अधिक समझ में आता है, जैसे हमारे जेनरेट किए गए एचटीएमएल को थप्पड़ मारने वाला टेम्पलेट इंजन, उदाहरण के लिए –

+1

लिंक-केवल उत्तर निराश होते हैं क्योंकि जिस साइट से आप लिंक कर रहे हैं वह नीचे जा सकता है या परिवर्तन। कृपया यहां महत्वपूर्ण बिंदु लिखें। –

6

वाक्य The Body itself should not be an instance of String, as this will break in Ruby 1.9. से परखने के बाद, मुझे लगता है चाहते हैं कि प्रतिक्रिया के अंतिम तत्व एक Enumerable हो गया है। चूंकि String एस इस मॉड्यूल को 1.9 में बंद कर दिया गया है, इसलिए आपको कुछ प्रकार के संग्रह की आवश्यकता होगी जो इसे लागू करता है।

बीटीडब्ल्यू: हैलो विश्व उदाहरण अक्सर यह पता लगाने के लिए बहुत अच्छे नहीं होते हैं कि किसी निश्चित तरीके से कुछ क्यों किया जाता है, वे बहुत तुच्छ हैं।