在scala中,如何访问元组中的特定索引?

在scala中,如何访问元组中的特定索引?,scala,tuples,Scala,Tuples,我正在实现一个函数,它获取随机索引并返回元组随机索引处的元素 我知道对于元组,比如,vala=(1,2,3)a.\u1=2 但是,当我使用random indexval index=random\u index(小于元组大小的整数)时,a.\u index不起作用。您可以使用,注意它是基于零的,返回类型为Any: val a=(1,2,3) a.productElement(1) // returns 2nd element 如果你只知道运行时的随机索引,那么你能得到的最好结果就是(正如@gu

我正在实现一个函数,它获取随机索引并返回元组随机索引处的元素

我知道对于元组,比如,
vala=(1,2,3)
a.\u1=2

但是,当我使用random index
val index=random\u index(小于元组大小的整数)
时,
a.\u index
不起作用。

您可以使用,注意它是基于零的,返回类型为
Any

val a=(1,2,3)
a.productElement(1) // returns 2nd element

如果你只知道运行时的
随机索引
,那么你能得到的最好结果就是(正如@guruston所回答的那样)


如果您在编译时知道
random\u index
,您可以这样做

import shapeless.syntax.std.tuple._
val a = (1,2,3)
val x = a(1)
x: Int // 2   // not just Any
// a(4) // doesn't compile
val i = 1
// a(i) // doesn't compile


虽然这个
a(1)
看起来很像标准的
a._1

你想要一个像向量一样的集合,而不是元组。那么在元组中,我不能访问随机索引?不,因为很多原因,我不是现成的。元组的概念是知道有多少元素(它们可以有不同的类型),每个元素都有一些语义含义,访问随机元素没有多大意义。您可以编写一个小函数,将一些int转换为其中一个字段,但同样,您可能希望使用集合。。我编辑了我的问题,不知道有什么区别?请注意,
2
作为一种类型返回,任何类型都是非常无用的。@Choi为了返回
Any
,而且
Int
索引必须在编译时已知(元组可以是
(1.0,2,3L)
)。详见我的回答。
import shapeless.syntax.std.tuple._
val a = (1,2,3)
val x = a(1)
x: Int // 2   // not just Any
// a(4) // doesn't compile
val i = 1
// a(i) // doesn't compile