Извините за долговечный вопрос:
скажем, у меня есть список животных, и я хочу разделить их так:
BasicAnimal = {Cat, Dog}
Carnivore = {Cat, Dog, Dragon}
Herbivore = {Cat, Dog, Horse}
сейчас, эти Животные также должны жить где-то. Так что есть
BasicShelter with a method shelter(animal: BasicAnimal)
Den with a method shelter(animal: Carnivore)
Shed with a method shelter(animal: Herbivore)
Какой лучший способ реализовать это в Scala? Одна попытка была:
class BasicAnimal extends Enumeration{
val Cat, Dog = Value
}
class Carnivore extends BasicAnimal{
val Dragon = Value
}
class Herbivore extends BasicAnimal{
val Horse = Value
}
, а затем
class BasicHouse{
def shelter(animal: BasicAnimal) = {//lots of code}
}
class Den{
def shelter(animal: Carnivore) = {
//again lots of code, but the cases dealing with Cat and Dog can be relegated to super.shelter
}
}
class Shed{
//the same
}
К сожалению, это не будет работать. Собака из плотки отличается от собаки в базамимале. Это carnivore.dog == basicanimal.dog возвращает false, так что единственный способ повторно использовать код из базишоуса в лося, имея довольно хакивый метод равенства, который сравнивает строки врач (или что-то подобное). Работает, но это очень нечисто. Можете ли вы увидеть любые другие возможности?