書名: Learn Scala Programming作者名: Slava Schmidt本章字數: 150字更新時間: 2021-06-10 19:35:39
Products can report the names of their element
This feature probably will be mostly useful for the case classes as it makes possible some generic programming without the need to resort to reflection or macros.
The following examples demonstrate how the new productElementName(idx) method can be used to build a naive JSON serializer for simple case classes:
case class User(name: String, surname: String, email: String)
def naiveToJsonString(p: Product): String =
(for { i <- 0 until p.productArity } yield
s""""${p.productElementName(i)}": "${p.productElement(i)}"""")
.mkString("{ ", ", ", " }")
Obviously, this simple iteration does not take nesting and escaping into account, but it already can produce valid results in elementary cases:
scala> val user = User("John", "Doe", "jd@mail.me")
user: User = User(John,Doe,jd@mail.me)
scala> naiveToJsonString(user)
res1: String = { "name": "John", "surname": "Doe", "email": "jd@mail.me" }
Unfortunately, the method taking an index of the element throws an exception in the case that the index is invalid:
scala> user.productElementName(3)
java.lang.IndexOutOfBoundsException: 3
at User.productElementName(<console>:1)
... 38 elided
We will discuss why throwing exceptions is not the best approach, as well as viable alternatives, in Chapter 6, Exploring Built-In Effects.
推薦閱讀
- Node.js 10實戰
- Visual C++串口通信開發入門與編程實踐
- Boost C++ Application Development Cookbook(Second Edition)
- Xcode 7 Essentials(Second Edition)
- Silverlight魔幻銀燈
- Python漫游數學王國:高等數學、線性代數、數理統計及運籌學
- Unreal Engine 4 Shaders and Effects Cookbook
- RabbitMQ Essentials
- Extending Puppet(Second Edition)
- Windows Embedded CE 6.0程序設計實戰
- 持續集成與持續交付實戰:用Jenkins、Travis CI和CircleCI構建和發布大規模高質量軟件
- Zabbix Performance Tuning
- Qlik Sense? Cookbook
- OpenCV with Python Blueprints
- 嵌入式C編程實戰