Что касается вашего первого вопроса, вы можете просто использовать псевдоним типа:
type KeyValue = (Int, String)
И, конечно, Scala - это объектно-ориентированный язык, так что относительно вашего второго вопроса о том, как специализировать кортеж,волшебное слово наследование :
case class KeyValue(key: Int, value: String) extends (Int, String)(key, value)
Вот и все.Классу даже не нужно тело.
val kvp = KeyValue(42, "Hello")
kvp._1 // => res0: Int = 42
kvp.value // => res1: String = "Hello"
Обратите внимание, однако, что наследование от классов прецедентов (которые Tuple2
) являются устаревшими и может быть запрещено в будущем.Вот предупреждение компилятора, которое вы получаете для приведенного выше определения класса:
предупреждение: у класса class KV
есть предок класса class Tuple2
.Это не рекомендуется из-за чрезмерного усложнения как использования, так и реализации.Вместо этого вы должны использовать экстракторы для сопоставления с образцом на неконечных узлах.