This page is no longer maintained — Please continue to the home page at www.scala-lang.org

Sequence patterns

1 reply
normen.mueller
Joined: 2008-10-31,
User offline. Last seen 3 years 8 weeks ago.

He,

is it possible to do pattern matching on enclosed sequences like:

val url = ...
lib find {
case Lib(_, _, Seq(_*, d @ Doc(_, u, _*), _*)) if u == url => true
case Lib(_, _, Seq(_*, d @ Doc(_, u, _*), _*)) => false
case _ => error("")
}
case class Lib(id: String, url: URI, doc: Doc*)
case class Doc(id: String, url: URI, part: Par*)
case class Par(id: String, s: String)

I want to search a specific document within a library. The following works, but I thought the above code should work as well:

...
case Lib(_,_, ds @ _*) => ds find (...)

Any suggestions?

Cheers,

normen.mueller
Joined: 2008-10-31,
User offline. Last seen 3 years 8 weeks ago.
Re: Sequence patterns

I tried the following within the scala command line interpreter and got the this:

------------------------------------------------------------------
$ scala
Welcome to Scala version 2.7.3.final (Java HotSpot(TM) Client VM, Java 1.5.0_16).
Type in expressions to have them evaluated.
Type :help for more information.

scala> case class Par(id: String, s: String)
defined class Par

scala> case class Doc(id: String, url: String, part: Par*)
defined class Doc

scala> case class Lib(id: String, url: String, doc: Doc*)
defined class Lib

scala> val ls = List(Lib("LA", "LAURL", Doc("DA", "DAURL")))
ls: List[Lib] = List(Lib(LA,LAURL,Array(Doc(DA,DAURL,Array()))))

scala> (ls find (_.id == "LA"))
res0: Option[Lib] = Some(Lib(LA,LAURL,Array(Doc(DA,DAURL,Array()))))

scala> (ls find (_.id == "LA")) match {
| case Some(Lib(_, _, Seq(_*, Doc(_, u, _*), _*))) => println (u)
| case _ => println(":(")
| }
exception when transforming private[this] val res1: Unit = line4$object.$iw.$iw.ls().find({
final class $anonfun extends java.lang.Object with ($iw.$iw.Lib) => Boolean with ScalaObject {
def this(): template $anonfun = {
$anonfun.super.this();
()
};
final def apply(x$1: $iw.$iw.Lib): Boolean = x$1.id().==("LA")
};
(new template $anonfun(): ($iw.$iw.Lib) => Boolean)
}) match {
case ($iw.$iw.Lib)Some[$iw.$iw.Lib]((java.lang.String,java.lang.String,Seq[$iw.$iw.Doc])$iw.$iw.Lib(_, _, Array[$iw.$iw.Doc]{scala.Seq.unapplySeq[A]() (Array[A]{(_)*, (java.lang.String,java.lang.String,Seq[$iw.$iw.Par])$iw.$iw.Doc(_, (u @ _), Array[$iw.$iw.Par]{(_)*}), (_)*})})) => scala.this.Predef.println(u)
case _ => scala.this.Predef.println(":(")
}
exception when transforming java.lang.Object with ScalaObject {
def this(): object $iw.$iw = {
$iw.super.this();
()
};
private[this] val res1: Unit = line4$object.$iw.$iw.ls().find({
final class $anonfun extends java.lang.Object with ($iw.$iw.Lib) => Boolean with ScalaObject {
def this(): template $anonfun = {
$anonfun.super.this();
()
};
final def apply(x$1: $iw.$iw.Lib): Boolean = x$1.id().==("LA")
};
(new template $anonfun(): ($iw.$iw.Lib) => Boolean)
}) match {
case ($iw.$iw.Lib)Some[$iw.$iw.Lib]((java.lang.String,java.lang.String,Seq[$iw.$iw.Doc])$iw.$iw.Lib(_, _, Array[$iw.$iw.Doc]{scala.Seq.unapplySeq[A]() (Array[A]{(_)*, (java.lang.String,java.lang.String,Seq[$iw.$iw.Par])$iw.$iw.Doc(_, (u @ _), Array[$iw.$iw.Par]{(_)*}), (_)*})})) => scala.this.Predef.println(u)
case _ => scala.this.Predef.println(":(")
};
def res1(): Unit = $iw.this.res1
}
exception when transforming final class $iw extends java.lang.Object with ScalaObject {
def this(): object $iw.$iw = {
$iw.super.this();
()
};
private[this] val res1: Unit = line4$object.$iw.$iw.ls().find({
final class $anonfun extends java.lang.Object with ($iw.$iw.Lib) => Boolean with ScalaObject {
def this(): template $anonfun = {
$anonfun.super.this();
()
};
final def apply(x$1: $iw.$iw.Lib): Boolean = x$1.id().==("LA")
};
(new template $anonfun(): ($iw.$iw.Lib) => Boolean)
}) match {
case ($iw.$iw.Lib)Some[$iw.$iw.Lib]((java.lang.String,java.lang.String,Seq[$iw.$iw.Doc])$iw.$iw.Lib(_, _, Array[$iw.$iw.Doc]{scala.Seq.unapplySeq[A]() (Array[A]{(_)*, (java.lang.String,java.lang.String,Seq[$iw.$iw.Par])$iw.$iw.Doc(_, (u @ _), Array[$iw.$iw.Par]{(_)*}), (_)*})})) => scala.this.Predef.println(u)
case _ => scala.this.Predef.println(":(")
};
def res1(): Unit = $iw.this.res1
}
exception when transforming java.lang.Object with ScalaObject {
def this(): object $iw = {
$iw.super.this();
()
};
final class $iw extends java.lang.Object with ScalaObject {
def this(): object $iw.$iw = {
$iw.super.this();
()
};
private[this] val res1: Unit = line4$object.$iw.$iw.ls().find({
final class $anonfun extends java.lang.Object with ($iw.$iw.Lib) => Boolean with ScalaObject {
def this(): template $anonfun = {
$anonfun.super.this();
()
};
final def apply(x$1: $iw.$iw.Lib): Boolean = x$1.id().==("LA")
};
(new template $anonfun(): ($iw.$iw.Lib) => Boolean)
}) match {
case ($iw.$iw.Lib)Some[$iw.$iw.Lib]((java.lang.String,java.lang.String,Seq[$iw.$iw.Doc])$iw.$iw.Lib(_, _, Array[$iw.$iw.Doc]{scala.Seq.unapplySeq[A]() (Array[A]{(_)*, (java.lang.String,java.lang.String,Seq[$iw.$iw.Par])$iw.$iw.Doc(_, (u @ _), Array[$iw.$iw.Par]{(_)*}), (_)*})})) => scala.this.Predef.println(u)
case _ => scala.this.Predef.println(":(")
};
def res1(): Unit = $iw.this.res1
}
}
exception when transforming final class $iw extends java.lang.Object with ScalaObject {
def this(): object $iw = {
$iw.super.this();
()
};
final class $iw extends java.lang.Object with ScalaObject {
def this(): object $iw.$iw = {
$iw.super.this();
()
};
private[this] val res1: Unit = line4$object.$iw.$iw.ls().find({
final class $anonfun extends java.lang.Object with ($iw.$iw.Lib) => Boolean with ScalaObject {
def this(): template $anonfun = {
$anonfun.super.this();
()
};
final def apply(x$1: $iw.$iw.Lib): Boolean = x$1.id().==("LA")
};
(new template $anonfun(): ($iw.$iw.Lib) => Boolean)
}) match {
case ($iw.$iw.Lib)Some[$iw.$iw.Lib]((java.lang.String,java.lang.String,Seq[$iw.$iw.Doc])$iw.$iw.Lib(_, _, Array[$iw.$iw.Doc]{scala.Seq.unapplySeq[A]() (Array[A]{(_)*, (java.lang.String,java.lang.String,Seq[$iw.$iw.Par])$iw.$iw.Doc(_, (u @ _), Array[$iw.$iw.Par]{(_)*}), (_)*})})) => scala.this.Predef.println(u)
case _ => scala.this.Predef.println(":(")
};
def res1(): Unit = $iw.this.res1
}
}
exception when transforming java.lang.Object with ScalaObject {
def this(): object line6$object = {
line6$object.super.this();
()
};
final class $iw extends java.lang.Object with ScalaObject {
def this(): object $iw = {
$iw.super.this();
()
};
final class $iw extends java.lang.Object with ScalaObject {
def this(): object $iw.$iw = {
$iw.super.this();
()
};
private[this] val res1: Unit = line4$object.$iw.$iw.ls().find({
final class $anonfun extends java.lang.Object with ($iw.$iw.Lib) => Boolean with ScalaObject {
def this(): template $anonfun = {
$anonfun.super.this();
()
};
final def apply(x$1: $iw.$iw.Lib): Boolean = x$1.id().==("LA")
};
(new template $anonfun(): ($iw.$iw.Lib) => Boolean)
}) match {
case ($iw.$iw.Lib)Some[$iw.$iw.Lib]((java.lang.String,java.lang.String,Seq[$iw.$iw.Doc])$iw.$iw.Lib(_, _, Array[$iw.$iw.Doc]{scala.Seq.unapplySeq[A]() (Array[A]{(_)*, (java.lang.String,java.lang.String,Seq[$iw.$iw.Par])$iw.$iw.Doc(_, (u @ _), Array[$iw.$iw.Par]{(_)*}), (_)*})})) => scala.this.Predef.println(u)
case _ => scala.this.Predef.println(":(")
};
def res1(): Unit = $iw.this.res1
}
}
}
exception when transforming final class line6$object extends java.lang.Object with ScalaObject {
def this(): object line6$object = {
line6$object.super.this();
()
};
final class $iw extends java.lang.Object with ScalaObject {
def this(): object $iw = {
$iw.super.this();
()
};
final class $iw extends java.lang.Object with ScalaObject {
def this(): object $iw.$iw = {
$iw.super.this();
()
};
private[this] val res1: Unit = line4$object.$iw.$iw.ls().find({
final class $anonfun extends java.lang.Object with ($iw.$iw.Lib) => Boolean with ScalaObject {
def this(): template $anonfun = {
$anonfun.super.this();
()
};
final def apply(x$1: $iw.$iw.Lib): Boolean = x$1.id().==("LA")
};
(new template $anonfun(): ($iw.$iw.Lib) => Boolean)
}) match {
case ($iw.$iw.Lib)Some[$iw.$iw.Lib]((java.lang.String,java.lang.String,Seq[$iw.$iw.Doc])$iw.$iw.Lib(_, _, Array[$iw.$iw.Doc]{scala.Seq.unapplySeq[A]() (Array[A]{(_)*, (java.lang.String,java.lang.String,Seq[$iw.$iw.Par])$iw.$iw.Doc(_, (u @ _), Array[$iw.$iw.Par]{(_)*}), (_)*})})) => scala.this.Predef.println(u)
case _ => scala.this.Predef.println(":(")
};
def res1(): Unit = $iw.this.res1
}
}
}
exception when transforming package {
final class line6$object extends java.lang.Object with ScalaObject {
def this(): object line6$object = {
line6$object.super.this();
()
};
final class $iw extends java.lang.Object with ScalaObject {
def this(): object $iw = {
$iw.super.this();
()
};
final class $iw extends java.lang.Object with ScalaObject {
def this(): object $iw.$iw = {
$iw.super.this();
()
};
private[this] val res1: Unit = line4$object.$iw.$iw.ls().find({
final class $anonfun extends java.lang.Object with ($iw.$iw.Lib) => Boolean with ScalaObject {
def this(): template $anonfun = {
$anonfun.super.this();
()
};
final def apply(x$1: $iw.$iw.Lib): Boolean = x$1.id().==("LA")
};
(new template $anonfun(): ($iw.$iw.Lib) => Boolean)
}) match {
case ($iw.$iw.Lib)Some[$iw.$iw.Lib]((java.lang.String,java.lang.String,Seq[$iw.$iw.Doc])$iw.$iw.Lib(_, _, Array[$iw.$iw.Doc]{scala.Seq.unapplySeq[A]() (Array[A]{(_)*, (java.lang.String,java.lang.String,Seq[$iw.$iw.Par])$iw.$iw.Doc(_, (u @ _), Array[$iw.$iw.Par]{(_)*}), (_)*})})) => scala.this.Predef.println(u)
case _ => scala.this.Predef.println(":(")
};
def res1(): Unit = $iw.this.res1
}
}
}
}
Exception in thread "main" java.lang.Exception: Unexpected pattern: class scala.tools.nsc.ast.Trees$Star => (_)*
at scala.tools.nsc.matching.ParallelMatching$RepFactory.classifyPat$1(ParallelMatching.scala:850)
at scala.tools.nsc.matching.ParallelMatching$RepFactory$$anonfun$32$$anonfun$apply$4.apply(ParallelMatching.scala:854)
at scala.tools.nsc.matching.ParallelMatching$RepFactory$$anonfun$32$$anonfun$apply$4.apply(ParallelMatching.scala:854)
at scala.List$.map2(List.scala:326)
at scala.tools.nsc.matching.ParallelMatching$Row.expand(ParallelMatching.scala:677)
at scala.tools.nsc.matching.ParallelMatching$RepFactory$$anonfun$32.apply(ParallelMatching.scala:854)
at scala.tools.nsc.matching.ParallelMatching$RepFactory$$anonfun$32.apply(ParallelMatching.scala:854)
at scala.List.flatMap(List.scala:1125)
at scala.tools.nsc.matching.ParallelMatching$RepFactory.make(ParallelMatching.scala:854)
at scala.tools.nsc.matching.ParallelMatching$MixSequenceStar.makeSuccRep(ParallelMatching.scala:488)
at scala.tools.nsc.matching.ParallelMatching$MixSequence.getTransition(ParallelMatching.scala:449)
at scala.tools.nsc.matching.ParallelMatching$MixSequence.tree(ParallelMatching.scala:462)
at scala.tools.nsc.matching.ParallelMatching$class.repToTree(ParallelMatching.scala:636)
at scala.tools.nsc.transform.ExplicitOuter.repToTree(ExplicitOuter.scala:19)
at scala.tools.nsc.matching.ParallelMatching$MixUnapply.tree(ParallelMatching.scala:388)
at scala.tools.nsc.matching.ParallelMatching$class.repToTree(ParallelMatching.scala:636)
at scala.tools.nsc.transform.ExplicitOuter.repToTree(ExplicitOuter.scala:19)
at scala.tools.nsc.matching.ParallelMatching$MixTypes.tree(ParallelMatching.scala:613)
at scala.tools.nsc.matching.ParallelMatching$class.repToTree(ParallelMatching.scala:636)
at scala.tools.nsc.transform.ExplicitOuter.repToTree(ExplicitOuter.scala:19)
at scala.tools.nsc.matching.ParallelMatching$MixSequence.tree(ParallelMatching.scala:463)
at scala.tools.nsc.matching.ParallelMatching$class.repToTree(ParallelMatching.scala:636)
at scala.tools.nsc.transform.ExplicitOuter.repToTree(ExplicitOuter.scala:19)
at scala.tools.nsc.matching.ParallelMatching$MixTypes.tree(ParallelMatching.scala:613)
at scala.tools.nsc.matching.ParallelMatching$class.repToTree(ParallelMatching.scala:636)
at scala.tools.nsc.transform.ExplicitOuter.repToTree(ExplicitOuter.scala:19)
at scala.tools.nsc.matching.ParallelMatching$MixTypes.tree(ParallelMatching.scala:613)
at scala.tools.nsc.matching.ParallelMatching$class.repToTree(ParallelMatching.scala:636)
at scala.tools.nsc.transform.ExplicitOuter.repToTree(ExplicitOuter.scala:19)
at scala.tools.nsc.matching.TransMatcher$class.handlePattern(TransMatcher.scala:82)
at scala.tools.nsc.transform.ExplicitOuter.handlePattern(ExplicitOuter.scala:19)
at scala.tools.nsc.transform.ExplicitOuter$ExplicitOuterTransformer.transform(ExplicitOuter.scala:473)
at scala.tools.nsc.ast.Trees$Transformer$$anonfun$transform$4.apply(Trees.scala:1364)
at scala.tools.nsc.ast.Trees$Transformer$$anonfun$transform$4.apply(Trees.scala:1364)
at scala.tools.nsc.ast.Trees$Transformer.atOwner(Trees.scala:1484)
at scala.tools.nsc.transform.TypingTransformers$TypingTransformer.atOwner(TypingTransformers.scala:33)
at scala.tools.nsc.transform.TypingTransformers$TypingTransformer.atOwner(TypingTransformers.scala:27)
at scala.tools.nsc.ast.Trees$Transformer.transform(Trees.scala:1363)
at scala.tools.nsc.transform.TypingTransformers$TypingTransformer.transform(TypingTransformers.scala:46)
at scala.tools.nsc.transform.ExplicitOuter$OuterPathTransformer.transform(ExplicitOuter.scala:224)
at scala.tools.nsc.transform.ExplicitOuter$ExplicitOuterTransformer.transform(ExplicitOuter.scala:482)
at scala.tools.nsc.ast.Trees$Transformer$$anonfun$transformStats$1.apply(Trees.scala:1478)
at scala.tools.nsc.ast.Trees$Transformer$$anonfun$transformStats$1.apply(Trees.scala:1476)
at scala.List$.loop$1(List.scala:293)
at scala.List$.mapConserve(List.scala:310)
at scala.tools.nsc.ast.Trees$Transformer.transformStats(Trees.scala:1476)
at scala.tools.nsc.ast.Trees$Transformer.transform(Trees.scala:1384)
at scala.tools.nsc.transform.TypingTransformers$TypingTransformer.scala$tools$nsc$transform$TypingTransformers$TypingTransformer$$super$transform(TypingTransformers.scala:44)
at scala.tools.nsc.transform.TypingTransformers$TypingTransformer$$anonfun$transform$1.apply(TypingTransformers.scala:44)
at scala.tools.nsc.transform.TypingTransformers$TypingTransformer$$anonfun$transform$1.apply(TypingTransformers.scala:44)
at scala.tools.nsc.ast.Trees$Transformer.atOwner(Trees.scala:1484)
at scala.tools.nsc.transform.TypingTransformers$TypingTransformer.atOwner(TypingTransformers.scala:33)
at scala.tools.nsc.transform.TypingTransformers$TypingTransformer.atOwner(TypingTransformers.scala:27)
at scala.tools.nsc.transform.TypingTransformers$TypingTransformer.transform(TypingTransformers.scala:44)
at scala.tools.nsc.transform.ExplicitOuter$OuterPathTransformer.transform(ExplicitOuter.scala:224)
at scala.tools.nsc.transform.ExplicitOuter$ExplicitOuterTransformer.transform(ExplicitOuter.scala:362)
at scala.tools.nsc.ast.Trees$Transformer.transformTemplate(Trees.scala:1462)
at scala.tools.nsc.ast.Trees$Transformer$$anonfun$transform$2.apply(Trees.scala:1356)
at scala.tools.nsc.ast.Trees$Transformer$$anonfun$transform$2.apply(Trees.scala:1356)
at scala.tools.nsc.ast.Trees$Transformer.atOwner(Trees.scala:1484)
at scala.tools.nsc.transform.TypingTransformers$TypingTransformer.atOwner(TypingTransformers.scala:33)
at scala.tools.nsc.transform.TypingTransformers$TypingTransformer.atOwner(TypingTransformers.scala:27)
at scala.tools.nsc.ast.Trees$Transformer.transform(Trees.scala:1355)
at scala.tools.nsc.transform.TypingTransformers$TypingTransformer.transform(TypingTransformers.scala:46)
at scala.tools.nsc.transform.ExplicitOuter$OuterPathTransformer.transform(ExplicitOuter.scala:224)
at scala.tools.nsc.transform.ExplicitOuter$ExplicitOuterTransformer.transform(ExplicitOuter.scala:482)
at scala.tools.nsc.ast.Trees$Transformer$$anonfun$transformStats$1.apply(Trees.scala:1478)
at scala.tools.nsc.ast.Trees$Transformer$$anonfun$transformStats$1.apply(Trees.scala:1476)
at scala.List$.loop$1(List.scala:293)
at scala.List$.mapConserve(List.scala:310)
at scala.tools.nsc.ast.Trees$Transformer.transformStats(Trees.scala:1476)
at scala.tools.nsc.ast.Trees$Transformer.transform(Trees.scala:1384)
at scala.tools.nsc.transform.TypingTransformers$TypingTransformer.scala$tools$nsc$transform$TypingTransformers$TypingTransformer$$super$transform(TypingTransformers.scala:44)
at scala.tools.nsc.transform.TypingTransformers$TypingTransformer$$anonfun$transform$1.apply(TypingTransformers.scala:44)
at scala.tools.nsc.transform.TypingTransformers$TypingTransformer$$anonfun$transform$1.apply(TypingTransformers.scala:44)
at scala.tools.nsc.ast.Trees$Transformer.atOwner(Trees.scala:1484)
at scala.tools.nsc.transform.TypingTransformers$TypingTransformer.atOwner(TypingTransformers.scala:33)
at scala.tools.nsc.transform.TypingTransformers$TypingTransformer.atOwner(TypingTransformers.scala:27)
at scala.tools.nsc.transform.TypingTransformers$TypingTransformer.transform(TypingTransformers.scala:44)
at scala.tools.nsc.transform.ExplicitOuter$OuterPathTransformer.transform(ExplicitOuter.scala:224)
at scala.tools.nsc.transform.ExplicitOuter$ExplicitOuterTransformer.transform(ExplicitOuter.scala:362)
at scala.tools.nsc.ast.Trees$Transformer.transformTemplate(Trees.scala:1462)
at scala.tools.nsc.ast.Trees$Transformer$$anonfun$transform$2.apply(Trees.scala:1356)
at scala.tools.nsc.ast.Trees$Transformer$$anonfun$transform$2.apply(Trees.scala:1356)
at scala.tools.nsc.ast.Trees$Transformer.atOwner(Trees.scala:1484)
at scala.tools.nsc.transform.TypingTransformers$TypingTransformer.atOwner(TypingTransformers.scala:33)
at scala.tools.nsc.transform.TypingTransformers$TypingTransformer.atOwner(TypingTransformers.scala:27)
at scala.tools.nsc.ast.Trees$Transformer.transform(Trees.scala:1355)
at scala.tools.nsc.transform.TypingTransformers$TypingTransformer.transform(TypingTransformers.scala:46)
at scala.tools.nsc.transform.ExplicitOuter$OuterPathTransformer.transform(ExplicitOuter.scala:224)
at scala.tools.nsc.transform.ExplicitOuter$ExplicitOuterTransformer.transform(ExplicitOuter.scala:482)
at scala.tools.nsc.ast.Trees$Transformer$$anonfun$transformStats$1.apply(Trees.scala:1478)
at scala.tools.nsc.ast.Trees$Transformer$$anonfun$transformStats$1.apply(Trees.scala:1476)
at scala.List$.loop$1(List.scala:293)
at scala.List$.mapConserve(List.scala:310)
at scala.tools.nsc.ast.Trees$Transformer.transformStats(Trees.scala:1476)
at scala.tools.nsc.ast.Trees$Transformer.transform(Trees.scala:1384)
at scala.tools.nsc.transform.TypingTransformers$TypingTransformer.scala$tools$nsc$transform$TypingTransformers$TypingTransformer$$super$transform(TypingTransformers.scala:44)
at scala.tools.nsc.transform.TypingTransformers$TypingTransformer$$anonfun$transform$1.apply(TypingTransformers.scala:44)
at scala.tools.nsc.transform.TypingTransformers$TypingTransformer$$anonfun$transform$1.apply(TypingTransformers.scala:44)
at scala.tools.nsc.ast.Trees$Transformer.atOwner(Trees.scala:1484)
at scala.tools.nsc.transform.TypingTransformers$TypingTransformer.atOwner(TypingTransformers.scala:33)
at scala.tools.nsc.transform.TypingTransformers$TypingTransformer.atOwner(TypingTransformers.scala:27)
at scala.tools.nsc.transform.TypingTransformers$TypingTransformer.transform(TypingTransformers.scala:44)
at scala.tools.nsc.transform.ExplicitOuter$OuterPathTransformer.transform(ExplicitOuter.scala:224)
at scala.tools.nsc.transform.ExplicitOuter$ExplicitOuterTransformer.transform(ExplicitOuter.scala:362)
at scala.tools.nsc.ast.Trees$Transformer.transformTemplate(Trees.scala:1462)
at scala.tools.nsc.ast.Trees$Transformer$$anonfun$transform$2.apply(Trees.scala:1356)
at scala.tools.nsc.ast.Trees$Transformer$$anonfun$transform$2.apply(Trees.scala:1356)
at scala.tools.nsc.ast.Trees$Transformer.atOwner(Trees.scala:1484)
at scala.tools.nsc.transform.TypingTransformers$TypingTransformer.atOwner(TypingTransformers.scala:33)
at scala.tools.nsc.transform.TypingTransformers$TypingTransformer.atOwner(TypingTransformers.scala:27)
at scala.tools.nsc.ast.Trees$Transformer.transform(Trees.scala:1355)
at scala.tools.nsc.transform.TypingTransformers$TypingTransformer.transform(TypingTransformers.scala:46)
at scala.tools.nsc.transform.ExplicitOuter$OuterPathTransformer.transform(ExplicitOuter.scala:224)
at scala.tools.nsc.transform.ExplicitOuter$ExplicitOuterTransformer.transform(ExplicitOuter.scala:482)
at scala.tools.nsc.ast.Trees$Transformer$$anonfun$transformStats$1.apply(Trees.scala:1478)
at scala.tools.nsc.ast.Trees$Transformer$$anonfun$transformStats$1.apply(Trees.scala:1476)
at scala.List$.loop$1(List.scala:293)
at scala.List$.mapConserve(List.scala:310)
at scala.tools.nsc.ast.Trees$Transformer.transformStats(Trees.scala:1476)
at scala.tools.nsc.ast.Trees$Transformer$$anonfun$transform$1.apply(Trees.scala:1352)
at scala.tools.nsc.ast.Trees$Transformer$$anonfun$transform$1.apply(Trees.scala:1352)
at scala.tools.nsc.ast.Trees$Transformer.atOwner(Trees.scala:1484)
at scala.tools.nsc.transform.TypingTransformers$TypingTransformer.atOwner(TypingTransformers.scala:33)
at scala.tools.nsc.transform.TypingTransformers$TypingTransformer.atOwner(TypingTransformers.scala:27)
at scala.tools.nsc.ast.Trees$Transformer.transform(Trees.scala:1351)
at scala.tools.nsc.transform.TypingTransformers$TypingTransformer.transform(TypingTransformers.scala:46)
at scala.tools.nsc.transform.ExplicitOuter$OuterPathTransformer.transform(ExplicitOuter.scala:224)
at scala.tools.nsc.transform.ExplicitOuter$ExplicitOuterTransformer.transform(ExplicitOuter.scala:482)
at scala.tools.nsc.ast.Trees$Transformer.transformUnit(Trees.scala:1479)
at scala.tools.nsc.transform.ExplicitOuter$ExplicitOuterTransformer.scala$tools$nsc$transform$ExplicitOuter$ExplicitOuterTransformer$$super$transformUnit(ExplicitOuter.scala:492)
at scala.tools.nsc.transform.ExplicitOuter$ExplicitOuterTransformer$$anonfun$transformUnit$1.apply(ExplicitOuter.scala:492)
at scala.tools.nsc.transform.ExplicitOuter$ExplicitOuterTransformer$$anonfun$transformUnit$1.apply(ExplicitOuter.scala:492)
at scala.tools.nsc.symtab.SymbolTable.atPhase(SymbolTable.scala:106)
at scala.tools.nsc.transform.ExplicitOuter$ExplicitOuterTransformer.transformUnit(ExplicitOuter.scala:492)
at scala.tools.nsc.transform.ExplicitOuter$ExplicitOuterTransformer.transformUnit(ExplicitOuter.scala:293)
at scala.tools.nsc.transform.Transform$Phase.apply(Transform.scala:30)
at scala.tools.nsc.Global$GlobalPhase.applyPhase(Global.scala:267)
at scala.tools.nsc.Global$GlobalPhase$$anonfun$run$1.apply(Global.scala:246)
at scala.tools.nsc.Global$GlobalPhase$$anonfun$run$1.apply(Global.scala:246)
at scala.Iterator$class.foreach(Iterator.scala:414)
at scala.collection.mutable.ListBuffer$$anon$1.foreach(ListBuffer.scala:266)
at scala.tools.nsc.Global$GlobalPhase.run(Global.scala:246)
at scala.tools.nsc.Global$Run.compileSources(Global.scala:574)
at scala.tools.nsc.Interpreter$Request.compile(Interpreter.scala:820)
at scala.tools.nsc.Interpreter.interpret(Interpreter.scala:505)
at scala.tools.nsc.Interpreter.interpret(Interpreter.scala:494)
at scala.tools.nsc.InterpreterLoop.interpretStartingWith(InterpreterLoop.scala:242)
at scala.tools.nsc.InterpreterLoop.interpretStartingWith(InterpreterLoop.scala:254)
at scala.tools.nsc.InterpreterLoop.interpretStartingWith(InterpreterLoop.scala:254)
at scala.tools.nsc.InterpreterLoop.interpretStartingWith(InterpreterLoop.scala:254)
at scala.tools.nsc.InterpreterLoop.command(InterpreterLoop.scala:230)
at scala.tools.nsc.InterpreterLoop.repl(InterpreterLoop.scala:142)
at scala.tools.nsc.InterpreterLoop.main(InterpreterLoop.scala:298)
at scala.tools.nsc.MainGenericRunner$.main(MainGenericRunner.scala:141)
at scala.tools.nsc.MainGenericRunner.main(MainGenericRunner.scala)
------------------------------------------------------------------

Normen Müller wrote:
> He,
>
> is it possible to do pattern matching on enclosed sequences like:
>
> val url = ...
> lib find {
> case Lib(_, _, Seq(_*, d @ Doc(_, u, _*), _*)) if u == url => true
> case Lib(_, _, Seq(_*, d @ Doc(_, u, _*), _*)) => false
> case _ => error("")
> }
> case class Lib(id: String, url: URI, doc: Doc*)
> case class Doc(id: String, url: URI, part: Par*)
> case class Par(id: String, s: String)
>
> I want to search a specific document within a library. The following
> works, but I thought the above code should work as well:
>
> ...
> case Lib(_,_, ds @ _*) => ds find (...)
>
> Any suggestions?
>
> Cheers,

Cheers,

Copyright © 2012 École Polytechnique Fédérale de Lausanne (EPFL), Lausanne, Switzerland