【发布时间】:2012-04-25 04:53:30
【问题描述】:
我想构建一个可以接受 Map 输入并输出 Case 类的 Parser。现在我有一些似乎没有利用 FP 的命令式代码。我只是看不到如何构建可以输出 Case 类的 Parser。
这是我所拥有的:
def fromMap(m: Map[String,AttributeValue]): User = {
val id = m.get("user-id") map {_.getS}
val email = m.get("email").get.getS
val name = m.get("name").get.getS
val openId = m.get("openId") map {_.getS}
User(id, email, name, openId)
}
更新: 我想我应该更清楚我想做一些类似于 Anorm 的事情,但使用 scala 中的 Parser Combinators。上面的问题是不灵活或不可重用。调用者必须拿走他们得到的东西。
我希望解析器组合器将是解析 Map 形式结果的正确方法。正如您可能已经猜到的那样,我正在使用 DyanmoDB。
更新 2: 显然我不能很好地解释这个问题。我要做的就是编写一个或多个 Pareser 组合器,它们可以使用调用者指定的绑定将 Map 转换为调用者选择的 Case 类。输入映射 => 输出案例类
更新 3: https://github.com/wfaler/scala-dynamo 看起来很有趣,但不使用解析器组合器。
【问题讨论】:
-
是的。我正在尝试将发电机结果绑定到案例类。
-
我不明白你的更新。你的输入值是什么,最后你想得到什么?
-
输入值是一个 Map[String,AttributeValue]。我想创建一个解析器,以便编写可以将其映射到案例类(在本例中为用户)的函数。
标签: parsing scala map case parser-combinators