2009-07-10 15 views
19

मुझे लगता है कि मैं समझता हूं कि फ्लिप-फ्लॉप एक ट्यूटोरियल के लिए धन्यवाद कैसे काम करता है, लेकिन उदाहरण के लिए सिर्फ शिक्षण के लिए योगदान दिया जाता है। क्या कोई इस बात का एक उदाहरण दे सकता है कि आपने वास्तव में कैसे उपयोग किया है या फ्लिप-फ्लॉप का उपयोग करेगा?रूबी फ्लिप-फ्लॉप कब उपयोगी होगा?

मैं एक वास्तविक दुनिया आवेदन के लिए देख रहा हूँ, न सिर्फ एक प्रदर्शन। इस उपकरण को कौन सी समस्याएं हल कर सकती हैं?

लिंक http://vision-media.ca/resources/ruby/ruby-flip-flop-or-range-operators होता था, लेकिन यह आजकल स्पैम प्रतीत होता है।

उत्तर

20

यहाँ एक उदाहरण (क rubycentral.com article से लिया गया) है जहाँ आप एक फ़ाइल से केवल कुछ लाइनों प्रिंट आउट है:

file = File.open("ordinal") 
while file.gets 
    print if ($_ =~ /third/) .. ($_ =~ /fifth/) 
end 

इसका मतलब यह है कि आप निम्नलिखित सामग्री के साथ एक फ़ाइल है कि:

first 
second 
third 
fourth 
fifth 
sixth 

कार्यक्रम केवल प्रिंट करेगा:

third 
fourth 
fifth 

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

+2

-1: अनचाहे कोड। आपको क्या लगता है, perl? आपको प्रिंट करें ($ _ = ~/third /) .. ($ _ = ~/third /) '(मुझे पता है कि यह आपका कोड नहीं है, लेकिन बहिष्कृत सुविधाओं का उपयोग करने वाले कोड को फैलाने की कोई आवश्यकता नहीं है)। – rampion

+0

इसके लिए वास्तविक उपयोग क्या है? मुझे फ़ाइल से 3 से 5 वीं लाइनों को प्रिंट करने की आवश्यकता हो सकती है (कोडिंग के लायक होने के लिए पर्याप्त समय)? – kajaco

+4

लगभग 3 और 5 भूल जाएं। यह एक प्रारंभ टैग और एक अंत टैग द्वारा सीमित फ़ाइल के एक खंड को निकालने के बारे में है। मुझे आशा है कि आप बेहतर देखेंगे कि यह एक वास्तविक दुनिया का उदाहरण क्यों है .. अब समकक्ष गैर-फ्लिप-फ्लॉप संस्करण में राज्य के लिए चर जोड़ने को शामिल किया जाएगा, यदि अधिक बयान: अधिक जटिल कोड। – inger

4

अजीब/भी कई पंक्तियों के साथ HTML तालिकाओं में प्रकाश डाला पंक्ति एक वैध यूज-केस होने के लिए प्रतीत होता है।

मैं जब रेल में तालिकाओं प्रतिपादन कुछ अतीत में ऊपर कई बार के रूप में के रूप में सुंदर नहीं लिखा है।

8

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

मैं एक उपकरण है जो नेट के माध्यम से एक दूरस्थ सर्वर :: SSH पर आदेशों चल शामिल लिख रहा था। इस विशेष सर्वर को एमओटीडी प्रिंट करने की परेशान आदत थी, भले ही सत्र एक लॉगिन सत्र था या नहीं। इसके परिणामस्वरूप मैंने बहुत कम कचरा वापस प्राप्त किया जब मैंने आदेश चलाया और आउटपुट पुनर्प्राप्त किया। चूंकि मेरे पास सर्वर सेटअप में बहुत अधिक प्रभाव नहीं था, इसलिए मैंने एक छोटी सी लिपि बनाई जो एक डिलीमीटर को मुद्रित करता था, प्रोग्राम चलाता था, और फिर एक और डिलीमीटर मुद्रित करता था। आउटपुट इस तरह कुछ देखा।

Welcome to Server X! 

+----------------------------------------------------------------------+ 
| Use of this server is restricted to authorized users only. User  | 
| activity may be monitored and disclosed to law enforcement personnel | 
| if any possible criminal activity is detected.      | 
+----------------------------------------------------------------------+ 

---------------------------------------------- 
    Setting up environment for user Adam. 
---------------------------------------------- 

>>>>>>>>>>>>>>>>>>>>>>>>> 
Program Output 
<<<<<<<<<<<<<<<<<<<<<<<<< 

फ्लिप फ्लॉप ऑपरेटर उत्पादन मैं जरूरत के साथ सिर्फ कोड की धारा बाहर निकलने के लिए एक उपयोगी शॉर्टकट था। मैंने एक रेगेक्स का उपयोग किया जो मैच शुरू करने के लिए 25 से अधिक थानों ">" से मेल खाता था, और मैच को समाप्त करने के लिए 25 कम-थान "<" से मेल खाता था।

output.each { |line| puts line if line[/^>{25}/] .. line[/^<{25}/] } 

आउटपुट

>>>>>>>>>>>>>>>>>>>>>>>>> 
Program Output 
<<<<<<<<<<<<<<<<<<<<<<<<< 

अधिकांश उदाहरण मैंने देखा है एक फ़ाइल या सरणियों नियमित अभिव्यक्ति के आधार पर से बाहर डेटा का हिस्सा खींच शामिल है। दिमाग में आने वाले कुछ अन्य उदाहरण गिट मर्ज टकरावों को खींच रहे हैं, विरासत फ्लैट फ़ाइल सिस्टम (जैसे फ़ाइल में लिखे गए structs) से कुछ रिकॉर्ड, और लॉग फाइलें।

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

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