.collect中的模式匹配:参考当前元素?

时间:2014-11-18 20:03:50

标签: scala pattern-matching

我有以下代码,效果很好:

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

但是,我想在patterns中引用当前项目以在函数参数中使用它并尝试过以下内容:

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

不幸的是,这不会编译。

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

是否有语法可以一起完成所有这些事情?

1 个答案:

答案 0 :(得分:4)

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

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