在Scala中命名元组变量

时间:2018-10-18 07:58:58

标签: scala tuples

现在我有一个def,它返回Tuple2 [String,Int]或(String,Int)。

def makeTuple(name: String, age: Int) : (String, Int) = {
  (name, age)
}
val nameAge = makeTuple("test", 12)
println(nameAge._1) // prints test
println(nameAge._2) // prints 12

确定行得通,但是有没有办法给这个元组命名?

例如:

println(nameAge.name)
println(nameage.age)

3 个答案:

答案 0 :(得分:3)

jubobs 所述,我们可以这样做:

使用案例类:

 case class NameAge(name:(String), age:(Int))

  def makeTuple(name: String, age:Int): NameAge = {
    NameAge(name, age)
  }

  val nameAge = makeTuple("test",12)
  println(nameAge.name, nameAge.age)

使用val:

  def makeTuple1(name: String, age:Int): (String, Int) = {
    (name, age)
  }

  val (name, age) = makeTuple1("test", 12)
  println(name, age)

答案 1 :(得分:3)

请注意,case类可以在本地定义,因此它们不会污染名称空间,并且可以靠近您使用它们的位置:

Polygon

或者,您可以使用类似Scala Records的库:

def f() = {
  ...
  case class NameAge(name: String, age: Int)
  val nameAge = NameAge("test", 12)
  println(nameAge.name)
  println(nameAge.age)
  ...
}

答案 2 :(得分:2)

您可以将两个名称都分配给函数的输出:

val (name, age) = makeTuple("test", 12)

甚至放弃该功能

val (name, age) = ("test", 12)

然后(在两种情况下)您都可以执行以下打印:

println(name)
println(age)