如何使用元组列表定义case类并在scala中访问元组

如何使用元组列表定义case类并在scala中访问元组,scala,case-class,Scala,Case Class,我有一个case类,它有一个参数a,它是int元组的列表。我想在a上迭代,并在a上定义操作 我尝试了以下方法: case class XType (a: List[(Int, Int)]) { for (x <- a) { assert(x._2 >= 0) } def op(): XType = { for ( x <- XType(a)) yield (x._1, x._2) } } case class XType(a:List[(Int,In

我有一个case类,它有一个参数a,它是int元组的列表。我想在a上迭代,并在a上定义操作

我尝试了以下方法:

case class XType (a: List[(Int, Int)]) {
 for (x <- a) {
  assert(x._2 >= 0)
 }
 def op(): XType = {
  for ( x <- XType(a))
    yield (x._1, x._2)
  }
}
case class XType(a:List[(Int,Int)]){
对于(x=0)
}
def op():XType={

对于(x您遇到了一个关于
for
理解的问题,这实际上是另一种表达
foreach
map
(以及
flatMap
with filter
/
filter
)的方式。有关更多解释,请参阅和

您对
理解的第一个
(带有断言的那一个)相当于

a.foreach(x => assert(x._2 >= 0))
a
是一个
列表
x
是一个
(Int,Int)
,一切都很好

但是,第二个on(在
op
中)转换为

XType(a).map(x => x)
这没有意义--
XType
不知道如何处理
map
,就像错误所说的那样

XType
的一个实例将其
a
简单地称为
a
(或
this.a
),因此
a.map(x=>x)
op
中就可以了(然后将结果转换成一个新的
XType


作为一般规则,
for
理解对于嵌套的
map
s(或
flatMap
s或任何东西)都很方便,而不是作为其他语言中
for
循环的1-1等价物——只需使用
map

您遇到了
for
理解的问题,这实际上是另一种表达
foreach
map
(和
flatMap
withFilter
/
filter
)。有关更多说明,请参阅和

您对
理解的第一个
(带有断言的那一个)相当于

a.foreach(x => assert(x._2 >= 0))
a
是一个
列表
x
是一个
(Int,Int)
,一切都很好

但是,第二个on(在
op
中)转换为

XType(a).map(x => x)
这没有意义--
XType
不知道如何处理
map
,就像错误所说的那样

XType
的一个实例将其
a
简单地称为
a
(或
this.a
),因此
a.map(x=>x)
op
中就可以了(然后将结果转换成一个新的
XType


一般来说,
for
理解对于嵌套的
map
s(或
flatMap
s或其他任何东西)很方便,而不是作为其他语言中
for
循环的1-1等价物——只需使用
map

您可以通过以下方式访问元组列表:

def op(): XType = {
  XType(a.map(...))
}

您可以通过以下方式访问元组列表:

def op(): XType = {
  XType(a.map(...))
}