gpt4 book ai didi

scala - 如何在没有样板代码的情况下复制 Scala 中的字段子集

转载 作者:行者123 更新时间:2023-12-04 19:42:40 26 4
gpt4 key购买 nike

我有以下类(class):

class C {
c1: Int,
c2: Int,
c3: String,
...
c40: Long
}

class A extends C {
a1: Int
}

class B extends C {
b1: Int,
b2: String
}

然后我需要在 A 实例的基础上创建 B 实例,并复制从 C 继承的字段的所有值,例如:

new B(50, "S", c1 = a.c1, c2 = a.c2, ..., c40 = a.c40)

但我想避免编写如下样板:c1 = a.c1, c2 = a.c2, ..., c40 = a.c40

如何以 Scala 方式高效地完成此操作,但仍保持静态定义的字段名称(不使用 map 或其他无模式的方法)?

一种解决方案是使用组合:

class A {
a1: Int,
base: C
}

class B {
base: C,
b1: Int,
b2: String
}

然后只写:new B(50, "S", base = a.base)但是在那种情况下,在所有其他代码中,如果我需要从基础部分引用值,我需要编写 b.base.c1 而不是 b.c1 - 我想也避免这种情况。

最佳答案

您可以尝试使用一种 hack,它使用 case 类的 tupled 函数。我可以想象您可以使用 unapply 提取源类的字段,附加新参数并使用 tupled 函数从扩展元组创建新类。

其中一个示例展示了如何使用 shapeless 很好地组合元组 shapeless tupples

不过这听起来像是一个 hack。

关于scala - 如何在没有样板代码的情况下复制 Scala 中的字段子集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24579605/

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