2011-03-10 38 views
16

क्या मैं रूबी में कुछ भी वापस नहीं कर सकता?रूबी कुछ भी वापस नहीं कर सकता?

बस शैक्षिक उद्देश्य

उदाहरण के लिए के लिए:

myarray = [1,2,3] 
myarray << some_method 

def some_method 
    if Date.today.day > 15 
    return "Trololo" 
    else 
    return __NOTHING__ 
    end 
end 

तो अगर आज 11'th मार्च myarray है नया आइटम जोड़ने नहीं होंगे। मैं nil नहीं करना चाहते - क्योंकि nil कुछ भी नहीं :)

नहीं है और मैं समझता हूँ, कि मैं की तरह myarray << some_method if some_method आदि मैं समझने के लिए मैं कुछ भी नहीं या हर बार वापसी कर सकते हैं माणिक में मैं लौट रहा हूँ चाहते if | unless बयान उपयोग कर सकते हैं कुछ (कम से कम मैं नील ऑब्जेक्ट प्राप्त कर सकता हूं)

उत्तर

20

असल में, आप जो खोज रहे हैं वह कथन है। लेकिन रूबी के पास बयान नहीं हैं, केवल अभिव्यक्तिसब कुछ एक अभिव्यक्ति है, यानी सब कुछ एक मूल्य देता है।

9

नहीं, आप कुछ भी वापस नहीं कर सकते हैं। रूबी में आप हमेशा कुछ वापस करते हैं (भले ही यह सिर्फ nil है) - इसके चारों ओर कोई रास्ता नहीं।

+7

कहा कि, 'nil' 'कुछ नहीं' की अवधारणा का प्रतिनिधित्व माना जाता है। –

2

मुझे जो कुछ भी पता है उससे रूबी के लिए कुछ भी मतलब नहीं है :) आप अपना खुद का कुछ भी परिभाषित नहीं कर सकते हैं और जितना संभव हो उतना फेंक सकते हैं। रूबी में, यदि आप स्पष्ट रूप से कुछ वापस नहीं करते हैं, तो अंतिम मूल्यांकन अभिव्यक्ति वापस कर दी जाती है।

5

आप रूबी में किसी विधि से "कुछ भी नहीं" वापस नहीं कर सकते हैं। जैसा कि आप इंगित करते हैं कि आप सशर्त रूप से अपने सरणी में तत्व जोड़ सकते हैं। आप सभी शून्य तत्वों को हटाने के लिए अपने सरणी पर .compact भी आमंत्रित कर सकते हैं।

5

आप रूबी के साथ असली कुछ भी नहीं लौट सकते हैं। सब कुछ एक वस्तु है। लेकिन आप इसे करने के लिए कुछ भी नकली बना सकते हैं। देखें:

Nothing = Module.new # Same as module Nothing; end 
class Array 
    alias old_op_append << 
    def <<(other) 
    if other == Nothing 
     self 
    else 
     old_op_append(other) 
    end 
    end 
end 

यह बदसूरत है लेकिन आपके नमूने में काम करता है। (कुछ भी ऑब्जेक्ट नहीं रहता है।)

+0

दिलचस्प हैक। उपयोगी हो सकता है। – fl00r

0

आप अपवादों के साथ कुछ भी अनुकरण नहीं कर सकते हैं।

class NothingError < RuntimeError 
end 

def nothing 
    raise NothingError 
end 

def foo x 
    if x>0 then x else nothing end 
end 

def nothingness 
    begin 
    yield 
    rescue NothingError 
    end 
end 

a = [1,2,3] 
nothingness { a << foo(4) } 
nothingness { a << foo(0) } 

शायद नहीं एक बहुत अच्छा विचार है लेकिन ...

+0

आप 'a << foo (4) बचाव कुछ भी नहीं करने के बजाय कुछ भी नहीं कर सकते ... –

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