Scala是否具有0元组和1元组的语法?

Jay*_*ker 24 scala tuples

scala> val two = (1,2)
two: (Int, Int) = (1,2)

scala> val one = (1,)
<console>:1: error: illegal start of simple expression
       val one = (1,)
                    ^

scala> val zero = ()
zero: Unit = ()
Run Code Online (Sandbox Code Playgroud)

这是:

val one = Tuple1(5)
Run Code Online (Sandbox Code Playgroud)

在Scala中编写单例元组文字真的是最简洁的方法吗?并且Unit像空元组一样工作吗?

这种不一致是否会困扰其他人?

Kim*_*bel 30

在Scala中编写单例元组文字真的是最简洁的方法吗?

是.

Unit是否像空元组一样工作?

不,因为它没有实现Product.

这种不一致是否会困扰其他人?

不是我.


Sag*_*ich 7

它实际上是编写一个arity为1的元组最简洁的方法.

在上面的评论中,我看到许多引用"为什么Tuple1有用".Scala中的元组扩展了Product特征,这使您可以迭代元组成员.

可以实现具有类型参数的方法Product,并且在这种情况下,Tuple1是在不丢失类型信息的情况下迭代具有多种类型的固定大小集合的唯一通用方法.

使用还有其他原因Tuple1,但这是我最常见的用例.


Dan*_*ral 5

我从未见过一次使用过Tuple1.我也无法想象一个.

在Python中,人们使用它,元组是固定大小的集合.Scala中的元组不是集合,它们是类型的笛卡尔积.所以,a Int x Int是a Tuple2[Int, Int],或(Int, Int)简称.当然,a Int是a Int,没有类型是没有意义的.

  • @Kipton纯粹完整,我打赌.或者,也许是因为元组和参数的长期计划集成(从一开始就应该存在于imho中).另一方面,在集成元组和参数时,`Tuple0`是有意义的. (3认同)
  • 这是旧的,但是0和1元组对于可迭代情况下的一致性非常有意义.元组可以表示固定大小的序列.脑海中出现的明显例子(来自另一种语言)是Numpy的`shape`,它描述了矩阵每个维度中元素的数量.显然我们可以有一维矩阵.我们可以零维度吗?有人会说是(numpy允许).所有这一切,我不知道你不能使用列表的任何情况(Scala有不可变列表,这很好地实现了这一点). (3认同)