2010-09-10 7 views
0

Est-ce que quelqu'un sait pourquoi je reçois cette erreur: initialize': undefined method jauge 'for # (NoMethodError) ?! Je veux dire que j'utilise l'attr_accessor pour les getters et les setters pour la jauge mais il dit quand même que je ne l'ai pas déclaré. J'ai ci-dessous posté un fragment du code. Merci d'avance.`initialize ': méthode non définie` gauge' (NoMethodError)

class ParkingLotGuest < Guest 

attr_accessor :gauge, :electricity_bill, :type_of_stay 

def initialize (name, address, phone, arrival, lives_where, type_of_stay, guest_wishes_electricity) 
    super(name, address, phone, arrival, lives_where) 
    @type_of_stay = type_of_stay 
    @electricity_bill = 0 
    @gauge = 0; 
    if (guest_wishes_electricity[0,1] == "j") 
     @gauge = lives_where.gauge 
    end 
end 

est ici la forme de code la classe parking_lot:

class Parking_Lot 

attr_accessor :nr 
    attr_accessor :gauge 
attr_reader :electricity_meter 

# Initiates a new caravan plot with the number nr and a electricity meter between 
# 2000 och 4000. 
def initialize (nr) 
    @nr = nr 
      @gauge = gauge 
    @electricity_meter = 4000-rand(2000) 
end 

# increases the electricity meter for use with a random amount between 
# 10-80 kWh per 24 h. 
def increase_meter(days) 
    generatedUse = (10+rand(70))*days 
    puts "Increases the meter with " + generatedUse.to_s + " kWh." 
    @electricity_meter += generatedUse 
end 

# Returns a string representation of the camping plot. 
def to_s 

    "Plot #{@nr+1} Electricity meter: #{@electricity_meter} kWh" 

end 
end 

code de la classe de camping.

@staticGuests = Array[ 
    ParkingLotGuest.new("Logan Howlett", "Tokyo", "07484822", 1, @parking_lots[0], "Husvagn", "j", @gauge), 
    ParkingLotGuest.new("Scott Summers", "Chicago", "8908332", 2, @parking_lots[1], "Husbil", "j", @gauge), 
    ParkingLotGuest.new("Hank Moody",  "Boston", "908490590",23, @parking_lots[2], "Tält", "n", @gauge), 
    CabinGuest.new("Jean Grey", "Detroit", "48058221", 4, @parking_lots[3]['Wolverine']), 
    CabinGuest.new("Charles Xavier", "Washington DC", "019204822", 5, @parking_lots[4]['Thanos']) 
]                              
+0

Pouvez-vous coller votre erreur exacte? Sur quelle ligne se passe-t-il, 9 ou 11? – theIV

+0

Peut-être que l'erreur est dans @gauge = lives_where.gauge – jordinl

+0

L'erreur est sur @gauge = lives_where.gauge. Il semble comme après l'instruction if ne reconnaît pas @gauge. Je pensais que le fait que je l'ai dans le cadre de l'attr_accessor signifie qu'il est initialisé. Est-ce que je me trompe ?! Merci. BTW voici l'erreur exacte: ./guest.rb:58:in 'initialize ': méthode non définie' jauge' pour # (NoMethodError) – Tim

Répondre

1

oeil à l'erreur plus attentivement:

undefined method `gauge' for #<Parking_Lot:0x10017c860 @electricity_meter=3622, @nr=0> (NoMethodError) 

Ce que cela dit est qu'une instance de Parking_Lot a reçu un appel de méthode pour une méthode nommée gauge, et il n'a pas une méthode gauge .

Dans cette ligne, il n'y a qu'un seul appel de méthode.

@gauge = lives_where.gauge 

@gauge = ... attribue directement à la variable d'instance @gauge, sans passer par la méthode setter, il est donc pas.

lives_where.gauge est probablement ce qui se plaint. Est-ce que lives_where a Parking_Lot?

+0

merci pour les commentaires utiles . Je vois ce que tu veux dire. Je poste un peu plus de code au-dessus de la classe parking_lot ... peut-il y en avoir une forme ?! – Tim

+0

Oui, la classe Parking_Lot doit avoir une méthode de jauge pour que l'initialisation de ParkingLotGuest fonctionne. Il appelle jauge sur un Parking_Lot, mais Parking_Lots n'a pas de jauges dans le code que vous avez posté. – BaroqueBobcat

+0

Aussi, habituellement vous ne mettez pas de caractères de soulignement dans les noms de classe, donc Parking_Lot ressemble habituellement à ParkingLot – BaroqueBobcat

Questions connexes