2011-12-05 13 views
5

Aby zapytać coś takiego:Metody Boolean w Ruby?

MyClass::create().empty? 

Jak bym utworzonej empty ciągu MojaKlasa?

Puste (prawda/fałsz) zależy od tego, czy zmienna klasy @arr jest pusta, czy nie.

+3

Czy to znaczy * class zmienną * '@@ arr' instancji zmiennej lub * *' @ arr'? – maerics

+3

W języku Ruby istnieje 'initialize', który jest wywoływany przez' MyClass.new'. – Reactormonk

+2

"W Ruby jest inicjalizacja, która jest wywoływana przez MyClass.new". Zgoda. I dobrze jest podążać za tym w Rubim; Trzymaj się żółtej ceglanej drogi, gdy masz już swoje kapcie z rubinem. –

Odpowiedz

7

Znak zapytania jest faktycznie częścią nazwy metody, więc można to zrobić:

class MyClass 

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

end 
2

dokładnie taki sam jak pokazałem w poprzednim poście, ale z inną nazwą metody.

Po pierwsze, create musi zwrócić coś metodą empty?. Na przykład:

class MyClass 
    def self.create 
    [] 
    end 
end 

Jeśli chcesz działać na instancjach MyClass jak na ostatnie pytanie:

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 

Tutaj MyClass działa jak prosty owinięcia wokół tablicy, zapewniając metodę add.

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

Może zajść potrzeba sprawdzenia, czy wartość @arr jest zerowa, czy też nie. To zależy od twojej definicji klasy pustej.

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

Można użyć Forwardable delegować empty? z klasy do tablicy:

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 
Powiązane problemy