现在我有一个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)
答案 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)