2011-02-12 12 views
15

क्या रूबी में कुछ शर्त सही होने तक सोने का कोई बेहतर तरीका है?नींद में सच्चाई सच होने तक नींद

loop do 
    sleep(1) 
    if ready_to_go 
    break 
    end 
end 
+0

आमतौर पर, कि आम तरीका है यह करने के लिए है। या आप क्रॉन इत्यादि जैसे कार्य शेड्यूलर का उपयोग कर सकते हैं – kurumi

+2

इस दृष्टिकोण के साथ क्या गलत है? क्या आप इसके बारे में चिंतित हैं कि लगातार पूछ रहे हैं "क्या हम अभी तक हैं?", या आप वर्बोज होने के बारे में चिंतित हैं? –

उत्तर

22

until एक बयान संशोधक हो सकता है, के लिए अग्रणी:

sleep(1) until ready_to_go 

आप किसी अन्य धागा ready_to_go बदलते अन्यथा आप लटका देंगे साथ उपयोग करने के लिए है कि एक सूत्र में होगा।

while (!ready_to_go) 
    sleep(1) 
end 

, फिर से के समान है लेकिन, आप ready_to_go टॉगल करने के लिए कुछ करना होगा या आप लटका चाहते हैं।

आप इस्तेमाल कर सकते हैं:

until (ready_to_go) 
    sleep(1) 
end 

लेकिन मैं until ऐसे ही सहजता से इस्तेमाल कभी नहीं किया गया है। असल में मैं लगभग इसका उपयोग कभी नहीं करता, समकक्ष (!ready_to_go) पसंद करता हूं।

+0

मैं गलती से "ready_to_go तक नींद" का उपयोग कर रहा था। धन्यवाद। – ccy

+2

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

+0

क्या आपका मतलब 'जब तक' या '' तक नहीं था? (वे दोनों नकारात्मक हैं, और वे दोनों "un" से शुरू होते हैं) –

2

आप पर वर्णित waitutil मणि का उपयोग कर सकते हैं, उदा।

require 'waitutil' 

WaitUtil.wait_for_condition("my_event to happen", 
          :timeout_sec => 30, 
          :delay_sec => 0.5) do 
    check_if_my_event_happened 
end 
0
def sleep_until(time) 
    time.times do 
    break if block_given? && yield 
    sleep(1) 
    end 
end 

उपयोग:

sleep_until(18){till_i_die} 
संबंधित मुद्दे