Use with to call several members on the same receiver.

with `with` takes a receiver object and returns the block result.

With Receiver

bonus
WithReceiver.kt
Replay: real traced execution (multi-file project)
class ScoreCard(val base: Int) {
    fun total(bonus: Int): Int {
        return base + bonus
    }
}

fun main() {
    val bonus = 2
    val card = ScoreCard(10)
    val total = with(card) {
        total(bonus)
    }

    println("bonus=$bonus")
    println("total=$total")
}
class ScoreCard(val base: Int) {
    fun total(bonus: Int): Int {
        return base + bonus
    }
}

fun main() {
    val bonus = 0
    val card = ScoreCard(10)
    val total = with(card) {
        total(bonus)
    }

    println("bonus=$bonus")
    println("total=$total")
}
class ScoreCard(val base: Int) {
    fun total(bonus: Int): Int {
        return base + bonus
    }
}

fun main() {
    val bonus = 5
    val card = ScoreCard(10)
    val total = with(card) {
        total(bonus)
    }

    println("bonus=$bonus")
    println("total=$total")
}
  1. bonus ← 2

    7fun main() {8    val bonus→ 2 = 2 //@bonus=0, 59    val card = ScoreCard(10)10    val total = with(card) {11        total(bonus)12    }
  2. fun total(bonus: Int): Int

    1class ScoreCard(val base: Int) {2    fun total(bonus2: Int): Int {3        return base10 + bonus24    }
  3. total ← 12

    9    val card = ScoreCard(10)10    val total→ 12 = with(card) {11        total(bonus)12    }1314    println("bonus=$bonus2")15    println("total=$total12")16}
    outputbonus=2
    total=12
  1. bonus ← 0

    7fun main() {8    val bonus→ 0 = 09    val card = ScoreCard(10)10    val total = with(card) {11        total(bonus)12    }
  2. fun total(bonus: Int): Int

    1class ScoreCard(val base: Int) {2    fun total(bonus0: Int): Int {3        return base10 + bonus04    }
  3. total ← 10

    9    val card = ScoreCard(10)10    val total→ 10 = with(card) {11        total(bonus)12    }1314    println("bonus=$bonus0")15    println("total=$total10")16}
    outputbonus=0
    total=10
  1. bonus ← 5

    7fun main() {8    val bonus→ 5 = 59    val card = ScoreCard(10)10    val total = with(card) {11        total(bonus)12    }
  2. fun total(bonus: Int): Int

    1class ScoreCard(val base: Int) {2    fun total(bonus5: Int): Int {3        return base10 + bonus54    }
  3. total ← 15

    9    val card = ScoreCard(10)10    val total→ 15 = with(card) {11        total(bonus)12    }1314    println("bonus=$bonus5")15    println("total=$total15")16}
    outputbonus=5
    total=15