Tôi đang cố gắng tìm hiểu cách tạo chương trình nhiều lớp bằng ruby. Tôi đã mã hóa một lớp Engine và một số lớp khác như thành phố, đường phố, v.v. và có vấn đề trong việc chuyển tên lớp như là một biến cho các lớp khác. Mã bên dưới ném lỗi: "City.rb: 15: in 'intro': undefined local variable hoặc method method 'cho # (NameError)". Tôi hiểu vấn đề một cách, nhưng tôi không nghĩ rằng thành phố cần phải biết bất cứ điều gì về đối tượng trò chơi , tôi nghĩ rằng nó chỉ có để có được nó và vượt qua nó trở lại. Nhưng tôi cảm thấy có sự hiểu lầm về cách truyền các biến (đặc biệt là tên lớp) giữa các lớp. Có gì sai trong thiết kế của tôi?Làm cách nào để chuyển tên lớp dưới dạng biến sang lớp khác trong 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
Tôi không biết bạn đang chuyển tên lớp ở đâu. –
Ngoài ra, hãy sửa tên của bạn. Nên là 'city.rb' và' game.rb' (tên tập tin - snake_case, tên lớp - PascalCase). –
Cảm ơn lời khuyên. Tôi đã cố gắng để vượt qua tên lớp như là động cơ trên game.rb # 6 như bản thân và trên game.rb # 9 như là động cơ biến. Đây có lẽ là nơi tôi bị nhầm lẫn. Bạn có thể cho tôi một ví dụ vững chắc về cách chuyển tên lớp cho một lớp khác, hoàn toàn ngoài ví dụ của tôi không? – barerd