Use qualified names to keep same-named methods apart.

namespace-labels Two objects can define a method with the same name. Qualifying each call with its object name, like `Metric.label` and `Imperial.label`, avoids any clash.

Avoiding Name Collisions

n
NamespaceLabels.scala
Replay: real traced execution (multi-file project)
object Metric {
  def label(n: Int): String = n + "m"
}

object Imperial {
  def label(n: Int): String = n + "ft"
}

object Main {
  def main(args: Array[String]): Unit = {
    val n = 5
    val metric = Metric.label(n)
    val imperial = Imperial.label(n)

    println("metric=" + metric)
    println("imperial=" + imperial)
  }
}
object Metric {
  def label(n: Int): String = n + "m"
}

object Imperial {
  def label(n: Int): String = n + "ft"
}

object Main {
  def main(args: Array[String]): Unit = {
    val n = 2
    val metric = Metric.label(n)
    val imperial = Imperial.label(n)

    println("metric=" + metric)
    println("imperial=" + imperial)
  }
}
object Metric {
  def label(n: Int): String = n + "m"
}

object Imperial {
  def label(n: Int): String = n + "ft"
}

object Main {
  def main(args: Array[String]): Unit = {
    val n = 8
    val metric = Metric.label(n)
    val imperial = Imperial.label(n)

    println("metric=" + metric)
    println("imperial=" + imperial)
  }
}
  1. n ← 5, metric ← 5m, imperial ← 5ft

    9object Main {10  def main(args: Array[String]): Unit = {11    val n→ 5 = 5 //@n=2, 812    val metric→ 5m = Metric.label(n5)13    val imperial→ 5ft = Imperial.label(n5)1415    println("metric=" + metric5m)16    println("imperial=" + imperial5ft)17  }18}
    outputmetric=5m
    imperial=5ft
  1. n ← 2, metric ← 2m, imperial ← 2ft

    9object Main {10  def main(args: Array[String]): Unit = {11    val n→ 2 = 212    val metric→ 2m = Metric.label(n2)13    val imperial→ 2ft = Imperial.label(n2)1415    println("metric=" + metric2m)16    println("imperial=" + imperial2ft)17  }18}
    outputmetric=2m
    imperial=2ft
  1. n ← 8, metric ← 8m, imperial ← 8ft

    9object Main {10  def main(args: Array[String]): Unit = {11    val n→ 8 = 812    val metric→ 8m = Metric.label(n8)13    val imperial→ 8ft = Imperial.label(n8)1415    println("metric=" + metric8m)16    println("imperial=" + imperial8ft)17  }18}
    outputmetric=8m
    imperial=8ft