【问题标题】:Play for Scala and Anorm: cannot create a simple parserPlay for Scala 和 Anorm:无法创建简单的解析器
【发布时间】:2013-04-11 18:39:11
【问题描述】:

这里应该有一些简单的东西,虽然我完全想念它,因为我是 Scala 和 Play 的菜鸟。代码如下:

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

提前致谢!

【问题讨论】:

    标签: scala playframework-2.0 anorm


    【解决方案1】:

    当你用小写命名变量时应该可以工作:

    case exceptionType ~ message ~ stackTrace => ExceptionInfo(exceptionType, message, stackTrace.split("\r\n"))
    

    小写是区分要绑定的变量(您要查找的内容)与要匹配的常量的区别。请参阅herehere 了解更多信息。

    【讨论】:

    • 您好,感谢您的回答。所以所有的 case 变量(在 => 的左边)都必须用小写命名?这是否也适用于get[String]("ExceptionInfo.ExceptionType")?我的意思是,我应该将其重命名为get[String]("ExceptionInfo.exceptionType") 吗?或者 Anorm 如何匹配字符串和那些 case 变量?
    • 正确,大小写变量需要以小写开头。最好坚持一种命名约定,在 Scala 中,它是用驼峰命名法命名字段。至于数据库字段,则具有更大的灵活性:您可以自行命名它们。 Anorm 只关心类型([String]、[Int] 等)和顺序(按“~”)。
    猜你喜欢
    • 2015-10-04
    • 1970-01-01
    • 2017-09-07
    • 2014-08-07
    • 2013-10-20
    • 2014-07-20
    • 2016-10-13
    • 2016-11-20
    • 1970-01-01
    相关资源
    最近更新 更多