Próbuję nauczyć się tworzyć program wieloplatformowy w ruby. Zakodowałem klasę Engine i kilka innych klas, takich jak miasto, ulica itp. I mam problem z przekazaniem nazwy klasy jako zmiennej do innych klas. Poniższy kod zgłasza błąd: "City.rb: 15: in 'intro': niezdefiniowana lokalna zmienna lub gra metod 'dla # (NameError)". W pewnym sensie rozumiem problem, ale nie sądzę, żeby to miasto musiało wiedzieć cokolwiek o obiekcie gry , myślę, że musi go tylko zdobyć i przekazać. Ale wydaje mi się, że mam nieporozumienie dotyczące przekazywania zmiennych (zwłaszcza nazwy klasy) między klasami. Co jest nie tak w moim projekcie?Jak przekazać nazwę klasy jako zmienną innej klasie ruby?
#Game.rb
require './City.rb'
class Engine
def initialize(city_name, street_name, budget)
@city = City.new(city_name)
@city.read_name()
play(@city, :intro, self)
end
def play(place, next_step, engine)
while true
next_step = place.method(next_step).call(place, next_step, engine)
end
end
end
game = Engine.new("Casablanca", "Costanza Boulvard", 200)
#City.rb
class City
def initialize(city_name)
@city_name = city_name
end
def read_name()
puts <<-READ_NAME
You are in a city called "#{@city_name}".
READ_NAME
end
def intro(place, next_step, engine)
puts "...."
game.play(@street, :enter, engine)
end
end
Nie widzę, gdzie podajesz nazwę klasy tutaj. –
Napraw też swoje nazewnictwo. Powinny to być 'city.rb' i' game.rb' (nazwy plików - snake_case, nazwy klas - PascalCase). –
Dzięki za cynk. Próbowałem przekazać nazwę klasy jako engine na game.rb # 6 jako self i na game.rb # 9 jako zmienny silnik. To jest prawdopodobnie miejsce, w którym się mylę. Czy możesz dać mi solidny przykład na to, jak przekazać nazwę klasy innej klasie, zupełnie niezależnie od mojego przykładu? – barerd