Para completar, se debe decir que su "aplicar" puede tomar múltiples valores, y que "actualizar" funciona como el doble de "aplicar", permitiendo "sobreescribir paréntesis" en el lado izquierdo de las asignaciones
Class PairMap[A, B, C]{
val contents: mutable.Map[(A,B), C] = new mutable.Map[(A, B), C]();
def apply(a:A, b:B):C = contents.get((a, b))
def update(a:A, b:B, c:C):Unit = contents.put((a, b), c)
}
val foo = new PairMap[String, Int, Int]()
foo("bar", 42) = 6
println(foo("bar", 42)) // prints 6
El valor principal de todo esto es que se mantiene a la gente de lo que sugiere la sintaxis extra para cosas que tenían que ser entubado-especial en las lenguas de la familia C-anteriores (por ejemplo, asignación de elemento de la matriz a buscar). También es útil para métodos de fábrica en objetos de compañía. Aparte de eso, se debe tener cuidado, ya que es una de esas cosas que fácilmente pueden hacer que su código sea demasiado compacto para ser realmente legible.
Gracias! Muy útil – Joshua