为Scala和Anorm播放:无法创建简单的解析器
这里应该有一些简单的东西,尽管我完全错过了,因为我是Scala和Play的noob。代码如下:为Scala和Anorm播放:无法创建简单的解析器,scala,playframework-2.0,anorm,Scala,Playframework 2.0,Anorm,这里应该有一些简单的东西,尽管我完全错过了,因为我是Scala和Play的noob。代码如下: case class ExceptionInfo(ExceptionType: String, Message: String, StackTrace: Seq[String]) object ExceptionInfo { val excInfoParser = { get[String]("ExceptionInfo.ExceptionType") ~
case class ExceptionInfo(ExceptionType: String, Message: String, StackTrace: Seq[String])
object ExceptionInfo
{
val excInfoParser = {
get[String]("ExceptionInfo.ExceptionType") ~
get[String]("Message") ~
get[String]("ExceptionInfo.StackTrace") map {
case ExceptionType ~ Message ~ StackTrace => ExceptionInfo(ExceptionType, Message, StackTrace.split("\r\n"))
}
}
}
这不会编译,输出如下:
Description Resource Path Location Type
not found: value ExceptionType Application.scala /testme/app/controllers line 40 Scala Problem
not found: value Message Application.scala /testme/app/controllers line 40 Scala Problem
not found: value StackTrace Application.scala /testme/app/controllers line 40 Scala Problem
not found: value ExceptionType Application.scala /testme/app/controllers line 40 Scala Problem
提前谢谢 用小写字母命名变量时应该有效:
case exceptionType ~ message ~ stackTrace => ExceptionInfo(exceptionType, message, stackTrace.split("\r\n"))
小写是将要绑定的变量(您正在寻找的)与要匹配的常量区分开来的地方。有关更多信息,请参见和。您好,谢谢您的回答。那么所有的case变量(在=>的左边)都必须用小写字母命名?这是否也适用于
get[String](“ExceptionInfo.ExceptionType”)
?我的意思是,我应该把它重命名为get[String](“ExceptionInfo.exceptionType”)
?或者Anorm如何匹配字符串和那些大小写变量?正确,大小写变量需要以小写开头。最好坚持一种命名约定,在Scala中,使用camelCase命名字段。至于数据库字段,有更大的灵活性:它们的名称取决于您。Anorm只关心类型([String]、[Int]等)和顺序(按“~”)。