gpt4 book ai didi

scala - 在 2.8.x 中的 Scala 中管理灵活、类型化、不可变的数据结构

转载 作者:行者123 更新时间:2023-12-02 07:53:37 29 4
gpt4 key购买 nike

这是 Scala 2.8.0 beta 对这个问题的跟进:

What is a proper way to manage flexible, typed, immutable data structures in Scala?

新技术是复制一个案例类,例如

case class Person(name:String, email:String)

val bob = Person("Bob", "bob@z.com")
val jill = bob.copy(name = "Jill")

这很好用,除了 Scala 似乎将我限制在一个案例类中的 22(?)个属性之外。这可能看起来很多,但对我来说还不够。

对于 23,我得到:“错误:类型 Function23 不是包 scala 的成员”。我可能会定义我自己的 Function23 等,但我不知道这意味着什么。

所以现在我回到原点。我需要使用我试图避免的公共(public)变量,或者创建一个 26+ 参数构造函数和一个配对的复制方法。恶心。

22 在这里似乎是一个相当武断的限制。有解决办法吗?

这是用于数据导入,看起来像这样:

new CatalogImportRecord() {
override val List(SVal(vendorSku), SVal(title), IVal(issues),
_, // YToMVal(termMonths),
DVal(sellPrice), DVal(buyPrice), DVal(retailPrice), NotesVal(allowsNew, allowsRenewals),
_) //DateValMdy(lastUpdated))
= fields

您可以看到我注释掉了未使用的提取以减少字段数。

也许有更好的方法来做到这一点。我发现这种提取技术有点死板,但这可能是最好的。

最佳答案

代码是自动生成的,因此如果您只打算自己使用该项目,您可以重新编译 Scala 库(更改设置)。

如果您在案例类中手动输入超过 23 项内容,请考虑以任何方便的方式对您的值进行分组——使用元组将有意义的内容分组在一起,或使用子案例类将内容更紧密地分组.这会使更新变得更加尴尬,但如果您将需要更新的内容分组在一起,它应该会有所帮助。

例如,在 Scala 2.8 中试试这个:

((1,2,3,4,5,6,7,8,9),(1,2,3,4,5,6),(1,2,3,4,5,6,7,8,9)).copy(_2=(4,5,6,7,8,9))

如果您已经在 val 中获得了原始文件,那么只更改一件事会更容易:

val a = (1,2,(1,2))
a.copy(_3=a._3.copy(_1=3))

关于scala - 在 2.8.x 中的 Scala 中管理灵活、类型化、不可变的数据结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2226305/

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