2011-12-05 9 views
5

आदेश में की तरह कुछ पूछना है?बूलियन विधियां?</p> <pre><code>MyClass::create().empty? </code></pre> <p>मैं कैसे MyClass भीतर <code>empty</code> सेट अप करना होगा:

खाली (सत्य/गलत) इस बात पर निर्भर करता है कि कक्षा परिवर्तनीय @arr खाली है या नहीं।

+3

क्या आपका मतलब है * वर्ग चर * '@@ arr' या * उदाहरण चर *' @ arr'? – maerics

+3

रुबी में, 'प्रारंभिक' है जिसे 'MyClass.new' द्वारा बुलाया जाता है। – Reactormonk

+2

"रुबी में, प्रारंभ होता है जिसे MyClass.new द्वारा बुलाया जाता है"। माना। और रूबी में इसका पालन करना अच्छा होता है; जब आप अपने रूबी चप्पल पर हों तो पीले ईंट की सड़क पर चिपके रहें। –

उत्तर

7

प्रश्न चिह्न, वास्तव में विधि नाम का हिस्सा है ताकि आप इस करना होगा:

class MyClass 

    def empty? 
    @arr.empty? # Implicitly returned. 
    end 

end 
2

वास्तव में एक ही जैसा कि मैंने पिछले पोस्ट में पता चला है, लेकिन एक अलग विधि नाम के साथ।

पहले, create को empty? विधि के साथ कुछ वापस करना होगा। उदाहरण के लिए:

class MyClass 
    def self.create 
    [] 
    end 
end 

यदि आप अपने आखिरी सवाल के अनुसार MyClass के उदाहरण पर काम करना चाहते हैं:

class MyClass 
    def self.create 
    MyClass.new 
    end 

    def initialize 
    @arr = [] 
    end 

    def empty? 
    @arr.empty? 
    end 

    def add x 
    @arr << x 
    self 
    end 
end 

यहाँ एक सरणी से संबंधित कोई सरल आवरण के रूप में MyClass कार्य करता है, एक add विधि प्रदान करते हैं।

pry(main)> MyClass.create.empty? 
=> true 
2

आपको यह जांचने की भी आवश्यकता हो सकती है कि @arr शून्य है या नहीं। यह खाली की आपकी कक्षा परिभाषा पर निर्भर करता है।

def empty? 
    [email protected] || @arr.empty? 
end 
0

आप सरणी के लिए अपने वर्ग से empty? को सौंपने के लिए Forwardable इस्तेमाल कर सकते हैं:

require "forwardable" 
class MyClass 
    extend Forwardable 
    def_delegators :@arr, :empty? 

    def initialize(arr) 
    @arr = arr 
    end 
end 

my_object = MyClass.new([]) 
my_object.empty? # => true 
संबंधित मुद्दे