2017-02-24 1 views
0

Warum kann ich nicht auf die Instanzvariable zugreifen?rspec --innit; in .bash_profile funktioniert nicht

let(:hotel2) { Hotel.new name: 'Premier Inn', rating: 1, 
       city: 'Leeds', total_rooms: 15, features: [] } 

Ich rufe es in der Initialisierung, aber es wirft einen falschen Argumentfehler.

Irgendwelche Ideen?

Antwort

0

Ihre Initialisierungssignatur stimmt nicht mit Ihrer Anrufsignatur überein. Sie übergeben einen Hash, aber keinen. Es gibt eine Reihe von Möglichkeiten, um Argumentlisten zu definieren, damit dies funktioniert. Hier ist eine:

class Hotel 
    def initialize(hash) 
    @name = hash[:name] 
    @rating = hash[:rating] 
    @city = hash[:city] 
    @total_rooms = hash[:total_rooms] 
    @features = hash[:features] 
    end 
end 

This blog post beschreibt, wie Ruby-V2 Schlüsselwort Argumente verwenden. Das wäre ein anderer, vielleicht besserer Weg, um Ihre initialization zu definieren. Hier ein Beispiel dafür:

class Hotel 
    def initialize(name: , rating:, city:, total_rooms:, features:) 
    @name = name 
    @rating = rating 
    @city = city 
    @total_rooms = total_rooms 
    @features = features 
    end 
end 

Sie können Standardwerte für Schlüsselwortargumente festlegen und als obligatorisch festlegen. In diesem Beispiel sind sie alle obligatorisch.

Verwandte Themen