11. MAGNET PATTERN
sprayチームが名づけたデザインパターン 参考:
基本的な考え方は先のOverlappable型クラスと同じ
ただしMagnet Patternでは、暗黙の型変換を利用して暗黙のパラメータリストを除いている
spray | Blog » The Magnet Pattern
trait OverlapMagnet{
type Result
def value:Result
}
object OverlapMagnet{
implicit class IntOverlapMagnet(i:Int) extends OverlapMagnet{
type Result = Int
def value = i * i
}
implicit class StringOverlapMagnet(s:String) extends OverlapMagnet{
type Result = String
def value = s.foldLeft(""){(l,r) => l + r + r}
}
}
def overlap(magnet:OverlapMagnet):magnet.Result = magnet.value