Skip to content

Instantly share code, notes, and snippets.

@michalkowol
Created January 21, 2015 20:45
Show Gist options
  • Save michalkowol/f622deccf3eee5f52a6c to your computer and use it in GitHub Desktop.
Save michalkowol/f622deccf3eee5f52a6c to your computer and use it in GitHub Desktop.
package com.michal
trait A[+Self <: A[_]] {
def a: Int
def b: Int
def addToA(plus: Int): Self = makeCopy(a + plus, b)
def makeCopy(newA: Int, newB: Int): Self
}
case class B(a: Int, b: Int) extends A[B] {
def makeCopy(a: Int = a, b: Int = b): B = copy(a = a, b = b)
def bMethod = s"$a, $b"
}
case class C(a: Int, b: Int, c: Int) extends A[C] {
def makeCopy(a: Int = a, b: Int = b): C = copy(a = a, b = b)
def cMethod = s"$a, $b, $c"
}
object MyApp extends App {
println(B(7, 4).makeCopy(a = 3).addToA(7).bMethod)
println(C(7, 4, 7).makeCopy(a = 3).addToA(7).cMethod)
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment