如何将包含3个元素的元组放入Set?
说,我有一套类型:
Set[(String, String, String)]
如何简单地将3个字符串添加到我的Set定义中?
以下编译器在抱怨吗?
set + ("a", "b", "c")
为什么元组的处理方式不同?它就像任何其他类型,所以为什么它在我的情况下失败?
答案 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))
对于不受括号限制的元素集,不会出现此问题,因为这样就不会混淆+的语法。