Scala 收集中的模式匹配:是否引用当前元素?

Scala 收集中的模式匹配:是否引用当前元素?,scala,pattern-matching,Scala,Pattern Matching,我有以下代码,运行良好: val encodedItems = patterns.collect { case ParsedItem(s, p, o, true) => EncodedItem(encode(s), encode(p), encode(o)) } 但是,我想在模式中引用当前项,以便在函数参数中使用它,并尝试了以下方法: val encodedItems = patterns.collect { case item: ParsedItem(s, p, o,

我有以下代码,运行良好:

val encodedItems = patterns.collect {
  case ParsedItem(s, p, o, true) =>
    EncodedItem(encode(s), encode(p), encode(o))
}
但是,我想在
模式中引用当前项,以便在函数参数中使用它,并尝试了以下方法:

val encodedItems = patterns.collect {
  case item: ParsedItem(s, p, o, true) =>
    EncodedItem(encode(s), encode(p, item), encode(o))
}
不幸的是,这无法编译

如果我只写
case-item:ParsedItem=>
它会工作,我可以使用
item
变量。但是,我想确保最后一个参数是
true
,就像在第一个代码块中一样,并且我想保留
s
p
o
变量


是否有一种语法可以同时执行所有这些操作?

使用
@
获取对匹配的完整对象的引用

val encodedItems = patterns.collect {
  case item @ ParsedItem(s, p, o, true) =>
    EncodedItem(encode(s), encode(p, item), encode(o))
}

使用
@
获取要匹配的完整对象的引用

val encodedItems = patterns.collect {
  case item @ ParsedItem(s, p, o, true) =>
    EncodedItem(encode(s), encode(p, item), encode(o))
}

太棒了——我觉得我永远也学不到Scala提供的所有语法。谢谢。太棒了——我觉得我永远也学不到Scala提供的所有语法。非常感谢。