case class Shaka(whenBorn: Shaka => Unit) {
  def born() = whenBorn(this)
  def walk(step: Int) = println(s"${step}歩歩いた")
  def raiseRightHandToHeaven() = println("右手で天を指す")
  def lowerLeftHandToEarth() = println("左手で地を指す")
  def say(msg: String) = println(s"${msg}と話す")
}

val shaka = Shaka { i =>
  i.walk(7)
  i.raiseRightHandToHeaven()
  i.lowerLeftHandToEarth()
  i.say("天上天下唯我独尊")
}

shaka born()