这是什么数据类型,val one =(1,2,3)

myt*_*mer 2 scala

在Scala的REPL上做了一些例子.

我完全忘了Array在实例化一个Array对象时尝试输入(试图测试++运算符).

无论如何,现在我想知道这是什么数据类型?

val one = (1,2,3) 
Run Code Online (Sandbox Code Playgroud)

或者上面的代码是什么数据结构或容器?这是什么电话?为什么有用?我不相信REPL提供了有关上述代码的有用信息.

感谢您的时间.

Tom*_*icz 7

这是Tuple3的一个实例.元组可以被认为是固定大小的不可变数组,其中每个元素可能具有不同的静态编译时检查类型.

在您的示例中,这恰恰是:

Tuple3[Int, Int, Int]
Run Code Online (Sandbox Code Playgroud)

但是你也可以创建各种类型的元组:

val one = (1, false, "a")
Run Code Online (Sandbox Code Playgroud)

在这种情况下:

one._1    // 1, Int type
one._2    // false, Boolean
one._3    // "a", String
Run Code Online (Sandbox Code Playgroud)

元组有各种用例.它们主要用于从函数返回两个值(通常更少).您可以使用数组或列表,但是所有元素都需要具有相同的类型(Any在最坏的情况下),因此您可以放松静态类型检查.此外,不保证这样的序列的大小,而元组具有固定的大小,在编译时已知.

将元组视为轻量级临时对象,但不要滥用它们.例如,不要Tuple3用来表示日/月/年.


Kip*_*ros 7

这是构造Tuple3对象的特殊语法.它相当于

val one = Tuple3[Int, Int, Int](1, 2, 3)
Run Code Online (Sandbox Code Playgroud)

元组定义为Tuple22.元组的一个重要用例是从函数返回多个值.元组也可以使用特殊语法解压缩:

scala> val (a, b, c) = one
a: Int = 1
b: Int = 2
c: Int = 3
Run Code Online (Sandbox Code Playgroud)

  • 请注意,解包的语法没有什么特别之处.这是一种简单的模式匹配. (3认同)