2011-12-05 11 views
5

el fin de pedir algo como:¿Métodos booleanos en Ruby?

MyClass::create().empty? 

¿Cómo podría configurar empty dentro MiClase?

Vacío (verdadero/falso) depende de si una variable de clase @arr está vacía o no.

+3

¿Quiere decir * variable de clase * '@@ arr' o variable de instancia * *' @ arr'? – maerics

+3

En Ruby, hay 'initialize' que es llamado por' MyClass.new'. – Reactormonk

+2

"En Ruby, hay initialize que es llamado por MyClass.new". Convenido. Y es bueno seguir eso en Ruby; Quédate con la carretera de ladrillos amarillos cuando tengas puestas las zapatillas Ruby. –

Respuesta

7

El signo de interrogación es en realidad parte del nombre del método, por lo que podría hacer esto:

class MyClass 

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

end 
2

Exactamente lo mismo que he mostrado en el último mensaje, pero con un nombre de método diferente.

En primer lugar, create debe devolver algo con un método empty?. Por ejemplo:

class MyClass 
    def self.create 
    [] 
    end 
end 

Si quieres estar operando en los casos de MyClass según su última pregunta:

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 

Aquí MyClass actúa como un simple envoltorio sobre una matriz, proporcionando un método add.

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

Es posible que también deba comprobar si @arr es nulo o no. Esto depende de la definición de su clase de vacío.

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

Usted podría utilizar Forwardable delegar empty? de su clase para la matriz:

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