Proposal: create an Extractor for PartialFunction

杨博 <[email protected]>
Newsgroups gmane.comp.lang.scala
Message-ID <[email protected]>

Sometimes, when I create a method, I need an extractor parameter for 
pattern matching, while there is not a generic extractor trait in the Scala 
Standard Library. So we have to use a PartialFunction as the parameter 
instead.


When I use the PartialFunction, I had to create pattern matching expression 
like this.


input match {

  case x if partialFunction.isDefined(x) =>

    val data = partialFunction.apply(x)

    doSomethingWith(data)

}


This approach is not perfect because:


   1. partialFunction.isDefined and partialFunction.apply checked x twice, 
   which is slow if isDefined has complex logical, checking whether a file 
   exists for example.
   2. The if condition around temporary variable x is too trivial.

I think the better approach is converting the PartialFunction to an 
extractor and matching with that extractor


implicit final class PartialFunctionAsExtractor[A, B](pf: 
PartialFunction[A, B]) {

  object Extractor {

    def unapply(a: A) = PartialFunction.condOpt(a)(pf)

  }

}


input match {
  case partialFunction.Extractor(data) =>
    doSomethingWith(data)
}

Since this is a common approach, I hope adding the 
PartialFunctionAsExtractor to scala.Predef .

I would like to create a pull request if people like this idea.

-- 
You received this message because you are subscribed to the Google Groups "scala-language" group.
To unsubscribe from this group and stop receiving emails from it, send an email to [email protected].
For more options, visit https://groups.google.com/d/optout.
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.