2011-12-30 18 views
24

मैं इस्तेमाल कर सकते हैं:क्या रूबी में नल-स्ट्रीम की तरह कुछ है?

File.open('/dev/null', 'w') 
यूनिक्स सिस्टम पर

, लेकिन अगर वहाँ एक रूबी तरह से इस लक्ष्य को हासिल करने के लिए, मैं इसे उपयोग करना चाहते हैं। बस एक आईओ स्ट्रीम की तलाश में है, जो तुरंत लिखता है, सभी लिखता है, थोड़े-ऑब्जेक्ट की तरह।

+1

यदि पहले से कोई नहीं है, तो इसे बनाना बेहद आसान होगा। बस लेखन विधियों के साथ एक वर्ग है जो कुछ भी नहीं करता है। – cHao

+0

यह विंडोज, लिनक्स और मैक ओएस पर ठीक काम करना चाहिए। –

+1

बस इस गिस्ट को मिला https://gist.github.com/369632 – maprihoda

उत्तर

5

नहीं, मुझे विश्वास नहीं है कि कम से कम पिछले संस्करणों में रूबी में एक नल स्ट्रीम की तरह कुछ भी है। उस स्थिति में, आपको खुद को बनाना होगा। तरीकों कि यह फोन करेगा आधार पर, आप, रिक्त स्ट्रीम वर्ग पर ठूंठ तरीकों लिखने के लिए इस तरह की आवश्यकता होगी:

class NullStream 
    def <<(o); self; end 
end 

ऊपर के उदाहरण नहीं पूरा तरह से है। उदाहरण के लिए, कुछ धाराओं को write, puts या अन्य विधियों को कॉल करने की आवश्यकता हो सकती है। इसके अलावा, को << जैसे अन्य तरीकों से self लौटकर कुछ विधियों को कार्यान्वित किया जाना चाहिए।

+1

इसे 'def << (o) होना चाहिए; स्वयं अंत 'ठीक से काम करने के लिए (अन्यथा' null_stream << foo << bar' टूट जाएगा)। – sepp2k

+1

यह केवल तभी काम करेगा यदि आप 'puts',' print', 'write', आदि को ओवरराइड करते हैं ... – Linuxios

+1

मुझे क्यों वोट दिया गया था? –

68

आप धाराओं से भरा व्यवहार चाहते हैं, सबसे अच्छा शायद उपयोग करने के लिए है:

File.open(File::NULL, "w") 

ध्यान दें कि File::NULL रूबी 1.9.3 के लिए नया है, तुम मेरे backports मणि का उपयोग कर सकते हैं:

require 'backports/1.9.3/file/null' # => Won't do anything in 1.9.3+ 
File.open(File::NULL, "w")   # => works even in Ruby 1.8.6 

तुम भी relevant code नकल कर सकता है अगर आप पसंद करते हैं।

+0

उल्लेख करने के लिए धन्यवाद कि –

+3

+1 इसे अपवित्र करने की आवश्यकता है! – d11wtq

+0

यह बढ़िया है। इस प्रकार मैं इसका उपयोग करता हूं: 'STDNULL = फ़ाइल।खुला (फ़ाइल :: न्यूल, 'डब्ल्यू') 'फिर मैं एसटीडीएनयूएलएल का उपयोग करता हूं जहां –

7

वहाँ stringIO, जो मैं उपयोगी पाते है जब मैं एक डमी filestream लागू करने के लिए करना चाहते हैं:

require "stringio" 
f = StringIO.new 
f.gets # => nil 

और यहाँ है कि दोनों यूनिक्स और खिड़कियों के लिए बिट बाल्टी पाता सवालों से बात काटना से कुछ कोड है, थोड़ा संशोधित:

# Is this platform MS Windows-like? 
# Actually, I suspect the following line is not very reliable. 
WINDOWS = RUBY_PLATFORM =~ /mswin/ 
# Path to the bit bucket. 
NULL_PATH = WINDOWS ? 'NUL:' : '/dev/null' 
+0

स्ट्रिंगियो.न्यू चाल मेरे +1 को प्राप्त करती है क्योंकि यह फ़ाइल डिस्क्रिप्टर नहीं खोलती है, इसलिए शायद स्पष्ट समापन की आवश्यकता नहीं है: http : //stackoverflow.com/questions/4795447/rubys-file-open-and-the-need-for-f-close –

+2

हालांकि यह इनपुट को कचरा नहीं करता है, इसलिए आपके उपयोग के आधार पर मेमोरी लीक का कारण बनने की क्षमता है मामला। –

1

/एन एक रत्न devnull

अशक्त फ़ाइल की रूबी कार्यान्वयन (जैसे/dev कहा जाता है ull Un * x पर, NUL विंडोज पर)

यह अशक्त फ़ाइल के साथ बातचीत नहीं करता है, बल्कि इसकी बजाय सभी तरीकों कि आईओ वस्तुओं को लागू करने के लिए डमी तरीकों है।

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