相关疑难解决方法(0)

模式与连词匹配(PatternA和PatternB)

Scala具有支持模式匹配中的析取的语言功能('Pattern Alternatives'):

x match {
    case _: String | _: Int => 
    case _ =>
}
Run Code Online (Sandbox Code Playgroud)

但是,如果仔细检查满足PatternA PatternB(连接),我经常需要触发一个动作.

我创建了一个模式组合器'&&',它增加了这个功能.三条小线条让我想起为什么我爱斯卡拉!

// Splitter to apply two pattern matches on the same scrutiny.
object && {
  def unapply[A](a: A) = Some((a, a))
}

// Extractor object matching first character.
object StartsWith {
  def unapply(s: String) = s.headOption
}

// Extractor object matching last character.
object EndsWith {
  def unapply(s: String) = s.reverse.headOption
}

// Extractor object matching length.
object Length {
  def …
Run Code Online (Sandbox Code Playgroud)

scala pattern-matching

60
推荐指数
2
解决办法
6763
查看次数

如何理解anorm中的"case id~username => _"?

Play2的anorm有一个很好的DSL结果解析器:

case class User(id:Pk[String], name:String)

object User {
  val parser = get[String]("id") ~ get[String]("name") map { 
    case id ~ name => User(id,name) 
  }
}
Run Code Online (Sandbox Code Playgroud)

我不明白这部分case id ~ name,为什么~两个变量之间可以存在?

case通常认为:

case id => _
case (a,b) => _
case Array(a, _*) => _
Run Code Online (Sandbox Code Playgroud)

但我没有看到case id ~ name.

来源~是:https://github.com/playframework/Play20/blob/master/framework/src/anorm/src/main/scala/SqlParser.scala#L49

它定义了一个案例类~:

case class ~[+A, +B](_1:A, _2:B)
Run Code Online (Sandbox Code Playgroud)

我写了一个简单的测试:

case class ~[+A, +B](_1:A, _2:B)

new ~("a","b") match {
    case x …
Run Code Online (Sandbox Code Playgroud)

scala anorm playframework-2.0

3
推荐指数
1
解决办法
1062
查看次数