gpt4 book ai didi

scala - 尝试从 Scala 中的其他类型生成类型

转载 作者:行者123 更新时间:2023-12-03 05:30:36 25 4
gpt4 key购买 nike

我在一个项目中使用 Slick,为此我需要行的 Slick 表示以及内存中的表示。为了简洁起见,我将在这里使用一个更简单的示例。举例来说,我有这两种类型:

type RawType =
(String, Int, Boolean)

type RawTypeRep =
(Rep[String], Rep[Int], Rep[Boolean])

有没有一种方法可以从另一个生成一个,这样我就不必同步更新它们?

或者也许从案例类生成它们?我确实有一个案例类表示,但它实际上与我所拥有的类型略有不同,因为当我对案例类进行水合时,我会进行一些突变,从而导致类型更改。

最佳答案

这似乎是 shapeless 的工作,尽管我不确定将其应用到您的案例的最佳方法。我能想到的最好的方法是不要从另一个生成一个,而是至少在编译时验证两者是否匹配:

import shapeless._
import shapeless.poly._
import shapeless.ops.tuple._

object ToRep extends (Id ~> Rep) {
def apply[A](a: A): Rep[A] = ???
}
type CheckRep[A, B] = Mapper.Aux[A, ToRep.type, B]

type RawType = (String, Int, Boolean)
type RawTypeRep = (Rep[String], Rep[Int], Rep[Boolean])
type RawTypeRepWrong = (Rep[String], Rep[String], Rep[Boolean])

implicitly[CheckRep[RawType, RawTypeRep]] // compiles
implicitly[CheckRep[RawType, RawTypeRepWrong]] // compile error

我猜想如果退一步到更大的上下文,可能有更好的方法来处理这个问题。可能值得浏览一下 Shapeless 的文档,看看它可以做哪些事情,看看这是否能给您带来任何想法。

关于scala - 尝试从 Scala 中的其他类型生成类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51989231/

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