Scala设置有3个元素的元组

时间:2015-07-09 10:51:33

标签: scala

如何将包含3个元素的元组放入Set?

说,我有一套类型:

Set[(String, String, String)]

如何简单地将3个字符串添加到我的Set定义中?

以下编译器在抱怨吗?

set + ("a", "b", "c")

为什么元组的处理方式不同?它就像任何其他类型,所以为什么它在我的情况下失败?

2 个答案:

答案 0 :(得分:3)

它没有很好地解析:

scala> Set[(String,String,String)]() + (("a", "b", "c"))
res3: scala.collection.immutable.Set[(String, String, String)] = Set((a,b,c))

您编写的内容被解析为Set。+(String x,String y,String z)

,即一个带有3个字符串参数的函数+,你想要的是一个函数+,只有一个3元组作为参数。

答案 1 :(得分:0)

注意HashSet的+签名作为示例:

def +(elem1: A, elem2: A, elems: A*): HashSet[A] 

(来自http://www.scala-lang.org/api/2.11.7/#scala.collection.immutable.HashSet

这种语法意味着要将元组添加到一组元组中需要双括号,一个用于容纳+的语法,另一个用于元组。例如:

scala> import scala.collection.immutable.HashSet
import scala.collection.immutable.HashSet

scala> val set: Set[(String, String, String)] = new HashSet[(String, String, String)]()
set: Set[(String, String, String)] = Set()

scala> val newset = set + (("one", "two", "three"))
newset: scala.collection.immutable.Set[(String, String, String)] = Set((one,two,three))

对于不受括号限制的元素集,不会出现此问题,因为这样就不会混淆+的语法。