gpt4 book ai didi

scala:获取值时不需要强制转换的类似 map 的结构?

转载 作者:行者123 更新时间:2023-12-01 01:28:08 25 4
gpt4 key购买 nike

我正在编写一个转换数据库查询结果的数据结构。原始结构是一个 java ResultSet,它将被转换为一个映射或类,允许通过命名方法调用或将字符串传递给 apply() 来访问该数据结构上的不同字段。显然不同的值可能有不同的类型。为了减轻这种数据结构的客户端的负担,我的偏好是不需要转换数据结构的值,但获取的值仍然具有正确的类型。

例如,假设我正在执行一个获取两个列值的查询,一个是 Int,另一个是 String。结果然后列的名称分别是“a”和“b”。一些理想的语法可能如下:

val javaResultSet = dbQuery("select a, b from table limit 1")

// with ResultSet, particular values can be accessed like this:
val a = javaResultSet.getInt("a")
val b = javaResultSet.getString("b")
// but this syntax is undesirable.

// since I want to convert this to a single data structure,
// the preferred syntax might look something like this:
val newStructure = toDataStructure[Int, String](javaResultSet)("a", "b")

// that is, I'm willing to state the types during the instantiation
// of such a data structure.

// then,
val a: Int = newStructure("a") // OR
val a: Int = newStructure.a

// in both cases, "val a" does not require asInstanceOf[Int].

我一直在试图确定什么样的数据结构可能允许这种情况,但我无法找到解决类型转换问题的方法。

另一个要求显然是我想定义一个用于所有数据库查询的数据结构。我意识到我可以轻松地为每次调用定义一个 case 类或类似的类,这解决了打字问题,但是当编写许多 db 查询时,这样的解决方案不能很好地扩展。我怀疑有些人会建议使用某种 ORM,但让我们假设在我的情况下,最好以字符串的形式维护查询。

有人有什么建议吗?谢谢!

最佳答案

要在不强制转换的情况下执行此操作,需要有关查询的更多信息,并且在编译时需要该信息。

I suspect some people are going to propose using some sort of ORM, but let us assume for my case that it is preferred to maintain the query in the form of a string.



你的怀疑是对的,你不会绕过这个。如果当前的 ORM 或像 squeryl 这样的 DSL 不适合您的喜好,您可以创建自己的。但我怀疑您是否能够使用查询字符串。

关于scala:获取值时不需要强制转换的类似 map 的结构?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6465794/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com