2011-12-05 18 views
5

gibi bir şey sormak için?Boole yöntemleri? Ben Sınıfım içinde <code>empty</code> kurarsınız nasıl</p> <pre><code>MyClass::create().empty? </code></pre> <p>: Amacıyla

Boş (doğru/yanlış), @arr sınıf değişkeninin boş olup olmadığına bağlıdır.

class MyClass 

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

end 
+3

sen * sınıf değişkeni * 'arr' @@ veya * örnek değişkeni *' demek istiyorsun @ arr'? – maerics

+3

Ruby'de 'MyClass.new' tarafından çağrılan' initialize' vardır. – Reactormonk

+2

"Ruby'de, MyClass.new tarafından çağrılan başlatma var". Kabul. Ve bunu Ruby'de takip etmek iyidir; Ruby terliklerinizi giydiğinizde sarı tuğlalı yola tutun. –

cevap

7

soru işareti, aslında yöntemi adı parçasıdır.

İlk olarak, create, empty? yöntemiyle bir şeyler döndürmelidir. Örneğin:

class MyClass 
    def self.create 
    [] 
    end 
end 

Eğer son sorunun göre MyClass örnekleri üzerinde çalışabilir isterseniz: Burada

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 

bir dizi etrafında basit bir sarıcı olarak MyClass görev yapar ve add yöntem sağlayarak.

pry(main)> MyClass.create.empty? 
=> true 
2
Geçen görevde gösterdi birbirinin aynı

, ama farklı bir yöntem adıyla: Bunu diye

2

Ayrıca @arr'ın sıfır olup olmadığını kontrol etmeniz gerekebilir. Bu, sınıfınızın boş tanımına bağlıdır.

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

Sen diziye Sınıfından empty? temsilci Forwardable kullanabilirsiniz:

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 
İlgili konular