2011-12-05 13 views
5

per chiedere qualcosa di simile:Metodi booleani in Ruby?

MyClass::create().empty? 

Come faccio a configurare empty all'interno MyClass?

vuoto (vero/falso) dipende dal fatto che una variabile di classe @arr sia vuota o meno.

+3

Vuoi dire * classe variabile * '@@ arr' o * variabile di istanza *' @ arr'? – maerics

+3

In Ruby, c'è 'initialize' che è chiamato da' MyClass.new'. – Reactormonk

+2

"In Ruby, viene inizializzata la chiamata a MyClass.new". Concordato. Ed è bene seguirlo in Ruby; Segui la strada di mattoni gialli quando hai le tue pantofole di rubino. –

risposta

7

Il punto interrogativo è in realtà una parte del nome del metodo, quindi si dovrebbe fare questo:

class MyClass 

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

end 
2

Esattamente come ho mostrato nel post precedente, ma con un diverso nome del metodo.

In primo luogo, create deve restituire qualcosa con un metodo empty?. Per esempio:

class MyClass 
    def self.create 
    [] 
    end 
end 

Se vuoi essere operativo sulle istanze di MyClass secondo la vostra ultima domanda:

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 

Qui MyClass agisce come un semplice wrapper per una matrice, fornendo un metodo add.

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

Potrebbe anche essere necessario verificare se @arr è nullo o no. Questo dipende dalla definizione della classe di vuoto.

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

Si potrebbe utilizzare Forwardable per delegare empty? dalla classe alla matrice:

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