Я делаю университетский проект.Проект об игре (как монополия).На этой неделе мы изучали наследование и теперь нам нужно использовать его в проекте.У меня есть некоторые проблемы с конструкторами дочерних классов.
У меня есть родительский класс:
class Casilla
attr_reader :numeroCasilla
attr_accessor :precioCompra
def initialize(numCas, coste)
@numeroCasilla = numCas
@precioCompra = coste
end
def self.copia(casilla)
self.new(casilla.numeroCasilla, casilla.precioCompra)
end
# Dejamos este método ya que no podemos modificar precioCompra desde calle
def setTitulo(ttl)
@precioCompra = ttl.precioCompra
end
def soyEdificable; end
def tengoPropietario; end
private :setTitulo
end
Это один дочерний класс:
class Calle < Casilla
attr_reader :titulo
attr_reader :tipo
# def initialize(casilla, ttl)
# copia(casilla,ttl)
# end
def self.copia(casilla,ttl)
super(casilla)
@titulo = ttl
@tipo = TipoCasilla::CALLE
self
end
def soyEdificable
salida = true
salida
end
def tengoPropietario
salida = @titulo.tengoPropietario();
salida
end
def setTitulo(ttl)
@titulo = ttl
super(ttl)
end
def propietarioEncarcelado
@titulo.propietarioEncarcelado
end
def asignarPropietario(jugador)
@titulo.propietario = jugador;
@titulo
end
def pagarAlquiler
@titulo.pagarAlquiler
end
private :setTitulo
end
Последний дочерний класс:
class OtraCasilla < Casilla
attr_reader :tipo
# def initialize(casilla, tp)
# copia(casilla)
# @tipo = tp
# end
def self.copia(casilla, tipo)
super(casilla)
@tipo = tipo
return self
end
def soyEdificable
salida = false
salida
end
def tengoPropietario
salida = false
salida
end
def to_s
puts super
puts " \n Tipo: #{@tipo} \n"
end
end
У родительского класса есть два разных способа отображения, например, «Calle» со специфической переменной или другими разными формами (с такими же переменными).ТипоСорпреса - это перечисление с типами "Casilla".Проблема с конструкторами.В другом классе, когда я хочу инициализировать объект Calle или объект otraCasilla, я использую
Calle.copia(···)
otraCasilla(···)
Выполнение работает нормально, но когда я хочу получить доступ к элементу класса, компилятор говорит мне, что этот элемент нене существуетЭто зона ошибки:
@casillas = Array.new
@casillas<< OtraCasilla.copia(Casilla.new(0, 0), TipoCasilla::SALIDA)
@casillas<< Calle.copia(Casilla.new(1, 500), TituloPropiedad.new("Av. de Andalucía", 500, 50, 20, 150, 250))
puts @casillas[1].titulo.nombre # I put this to check if the constructor is good
В последней строке у нас есть эта ошибка:
NoMethodError: undefined method `titulo' for ModeloQytetet::Calle:Class
Спасибо за ваше время и извините, если мой английский не хорош.