【问题标题】:scala case class copy implementationscala案例类复制实现
【发布时间】:2016-02-25 11:29:54
【问题描述】:

我找不到如何在 scala 中为案例类实现复制。

我可以检查一下吗?

我虽然 Intellij 可以指出我的实现,但它不想跳转,我不知道为什么:/

【问题讨论】:

  • 它是由 scalac 生成的,看起来像这样 stackoverflow.com/a/6637597/5123895 要实际看到它,我认为您需要编译和反编译或在 scalac 中启用某些选项。

标签: scala class case


【解决方案1】:

您可以使用 scalac -print ClassName.scala 检查 scala 案例类输出,因为 copy 实际上是编译器生成的方法。

这是一个给定的例子:

case class Test(s: String, i: Int)

这是过滤掉copy的噪声后的输出:

case class Test extends Object with Product with Serializable {
    private[this] val s: String = _;
    def s(): String = Test.this.s;

    private[this] val i: Int = _;
    def i(): Int = Test.this.i;

    def copy(s: String, i: Int): common.Test = new common.Test(s, i);
    def copy$default$1(): String = Test.this.s();
    def copy$default$2(): Int = Test.this.i();
}

【讨论】:

  • 这对于 copy$default$1 和 copy$default$2 来说有点奇怪。我仍然不确定我会做什么Test("a",3).copy(i=5)
  • 这就是所谓的:def copy(s: String, i: Int): common.Test = new common.Test(s, i);
  • 好的,所以它调用了一些我们看不到的类的方法 :-)) 最敏锐,它避免反射吗?
  • @matanster 是的,它是编译时生成的。
猜你喜欢
  • 2020-07-29
  • 1970-01-01
  • 2016-04-13
  • 2012-10-22
  • 1970-01-01
  • 1970-01-01
  • 2020-07-10
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多