|
|
1
15
您需要一些case类来为您的数据类型建模。在函数式语言中,这些类型的东西被称为“抽象数据类型”,你可以通过谷歌搜索一下Haskell是如何使用它们的。Scala相当于Haskell的ADT使用了密封的traits和case类。
让我们看一个例子
rewrite of the JSON parser combinator
操作此表单的JSON数据涉及模式匹配。由于JsValue是密封的,如果您没有处理所有情况,编译器将警告您。例如
模式匹配使我们能够确保处理每一种情况,还可以从JsType中“展开”底层值。它提供了一种类型安全的方式来知道我们已经处理了每一个案例。 此外,如果您在编译时知道正在处理的JSON数据的结构,您可以做一些非常酷的事情,比如 n8han's extractors . 非常强大的东西,看看吧。 |
|
|
2
1
嗯,有两种方法可以解决这个问题。我可能会用
现在,假设您正在阅读JSON
每次你把一块地从
从技术上讲,您必须进行这种模式匹配,以便在从JSON中提取数据后使用它。好类型方法的优点是编译器会检查您,以确保您没有错过任何可能性。缺点是你不能跳过不可能的事情(比如
|
|
|
3
1
JSON被用作“Scala编程”中的一个例子,在关于combinator解析的一章中。 |