在 Scala 中命名元组变量



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

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)

正如jubobs提到的,我们可以这样做:

使用 case 类:

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)

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

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

或者,您可以使用像 Scala Records 这样的库:

val nameAge = Rec("name" -> "test", "age" -> 12)
println(nameAge.name)
println(nameAge.age)

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

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

甚至摆脱该功能

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

然后(在这两种情况下(您可以按如下方式执行打印:

println(name)
println(age)

最新更新