Вопрос о классах типов в Scala

Пусть есть классы Fruit , Orange и Apple .

abstract class Fruit
class Orange extends Fruit
class Apple extends Fruit

Теперь я хочу добавить write ] для обоих типов Orange и Apple . Используя шаблон типа , я могу сделать следующее:

trait Writer[T] {def write(t:T)}

implicit object AppleWriter extends Writer[Apple] {
   def write(a:Apple) {println("I am an apple!")} 
}

implicit object OrangeWriter extends Writer[Orange] {
   def write(o:Orange) {println("I am an orange!")} 
}

def write[T](t:T)(implicit w:Writer[T]){w.write(t)}

Итак, так хорошо, но что, если я хочу определить writeFruits ?

def writeFruits(fruits:List[Fruit]) {for (fruit <- fruits) write(fruit)}

Я хотел бы writeFruits для вызова напишите [Apple] или напишите [Orange] для каждого фрукта . Я вижу, что это не работает (и знаю почему), но возможно я все равно смогу реализовать writeFruits .

Могу ли я как-нибудь реализовать writeFruits ?

5
задан Michael 12 April 2011 в 14:04
поделиться