2017-09-30 3 views
0

Mon code de test dit le texte suivant:Ruby: Valeurs de retour des entrées à la classe

d001 = SimpleDate.new(2016, 1, 4) 
assert(d001.year == 2016) 

Lorsqu'une entrée de l'année est 2016, je veux que ce test pour obtenir rentrera 2016

Mon code de classe dit les éléments suivants

class SimpleDate 
    def initialize(year, month, day) 
    @year = year 
    @month = month 
    @day = day 
    end 
end 

Que dois-je dois mettre à pouvoir mettre SimpleDate.new(2016,1,4).year == 2016 et ne pas obtenir une erreur de ma classe? J'espérais @year le feraient.

+1

Que signifie l'erreur que vous avez besoin? –

Répondre

2

Ajouter un attr_reader pour l'année.

class SimpleDate 
    attr_reader :year 

    def initialize(year, month, day) 
    @year = year 
    @month = month 
    @day = day 
    end 
end 

C'est le même que

def year 
    @year 
end 
+0

Bill: [Module :: attr_reader] (https://ruby-doc.org/core-2.4.0/Module.html#method-i-attr_reader) est une méthode de classe invoquée lors de la création de la classe. 'attr_reader: year' est équivalent à' self.attr_reader (: year) ', ce qui, étant donné que' self' vaut 'SimpleDate' à ce moment-là, est identique à' SimpleDate.attr_reader (: year) '. Notez à partir du document que vous pouvez écrire à la place 'attr_reader" year "', mais vous ne verrez pas cela terminé. –

+0

Merci Ursus. Ça a marché! Très apprécié @CarySwoveland Que voulez-vous dire "ne verra pas cela fait?" les gens ont tendance à ne pas aimer cette syntaxe en raison d'un caractère supplémentaire? –

+0

Mon plaisir Bill;) – Ursus