クラスFruit、Orange、およびがあるとしAppleます。
abstract class Fruit
class Orange extends Fruit
class Apple extends Fruit
ここで、型とwriteの両方に機能を追加したいと考えています。型クラスパターンを使用すると、次のことができます。OrangeApple
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)}
どちらかまたはfor eachwriteFruitsを呼び出したいと思います。うまくいかないことがわかりました(そしてその理由はわかっています)が、とにかく実装できるかもしれません。write[Apple]write[Orange]fruitwriteFruits
writeFruits何とか実装できますか?