Scala 有 0 元组和 1 元组的语法吗?

发布于 2024-12-02 00:06:01 字数 391 浏览 1 评论 0原文

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 = ()

val one = Tuple1(5)

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

这种不一致会打扰其他人吗?

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 = ()

Is this:

val one = Tuple1(5)

really the most concise way to write a singleton tuple literal in Scala? And does Unit work like an empty tuple?

Does this inconsistency bother anyone else?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

乞讨 2024-12-09 00:06:01

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

是的。

Unit 的工作方式就像一个空元组吗?

不,因为它没有实现Product

这种不一致会打扰其他人吗?

不是我。

really the most concise way to write a singleton tuple literal in Scala?

Yes.

And does Unit work like an empty tuple?

No, since it does not implement Product.

Does this inconsistency bother anyone else?

Not me.

梦冥 2024-12-09 00:06:01

这确实是编写元数为 1 的元组的最简洁的方法。

在上面的评论中,我看到许多引用“为什么 Tuple1 很有用”。
Scala 中的元组扩展了 Product 特征,它允许您迭代元组成员。

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

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

It really is the most concise way to write a tuple with an arity of 1.

In the comments above I see many references to "why Tuple1 is useful".
Tuples in Scala extend the Product trait, which lets you iterate over the tuple members.

One can implement a method that has a parameter of type Product, and in this case Tuple1 is the only generic way to iterate fixed size collections with multiple types without losing the type information.

There are other reasons for using Tuple1, but this is the most common use-case that I had.

沒落の蓅哖 2024-12-09 00:06:01

我从未见过使用 Tuple1 的情况。我也无法想象一个。

在人们确实使用它的 Python 中,元组是固定大小的集合。 Scala 中的元组不是集合,它们是类型的笛卡尔积。因此,Int x Int 是一个 Tuple2[Int, Int],或简称为 (Int, Int)。当然,Int 就是 Int,没有任何类型是毫无意义的。

I have never seen a single use of Tuple1. Nor can I imagine one.

In Python, where people do use it, tuples are fixed-size collections. Tuples in Scala are not collections, they are cartesian products of types. So, an Int x Int is a Tuple2[Int, Int], or (Int, Int) for short. Naturally, an Int is an Int, and no type is meaningless.

只有一腔孤勇 2024-12-09 00:06:01

前面的答案给出了 1 个元素的有效元组。
对于零个元素之一,此代码可以工作:

object tuple0 extends AnyRef with Product {
     def productArity = 0
     def productElement(n: Int) = throw new IllegalStateException("No element")
     def canEqual(that: Any) = false
}

The previous answers have given a valid Tuple of 1 element.
For one of zero elements this code could work:

object tuple0 extends AnyRef with Product {
     def productArity = 0
     def productElement(n: Int) = throw new IllegalStateException("No element")
     def canEqual(that: Any) = false
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文