gpt4 book ai didi

scala - 需要帮助解释 scala 问题

转载 作者:行者123 更新时间:2023-12-04 22:24:31 24 4
gpt4 key购买 nike

我有两个 scala 类(以及当我使用 javap -private 读取类文件时它们的 Java 代码)。

当我使用 ndtoString方法,它将在类中生成私有(private)成员字段。这是为什么?我有点困惑。

斯卡拉#1:

class Rational(n: Int, d: Int) {

}

等效于 javap:
public class com.zjffdu.tutorial.scala.Rational
extends java.lang.Object
implements scala.ScalaObject{
public com.zjffdu.tutorial.scala.Rational(int, int);
}

斯卡拉#2:
class Rational(n: Int, d: Int) {
override def toString() = n + "/" + d
}

等效于 javap:
public class com.zjffdu.tutorial.scala.Rational
extends java.lang.Object
implements scala.ScalaObject{
private final int n;
private final int d;
public java.lang.String toString();
public com.zjffdu.tutorial.scala.Rational(int, int);
}

最佳答案

嗯,n 的值和 d需要以某种方式从 toString 内部可用 body ,对吧?否则你不能使用它们。在构建新实例和 n 之间可能发生任何事情。和 d碰巧在堆栈上,当你调用 toString , 和 np早就从堆栈中消失了。所以编译器会自动将值保存在字段中——即使你没有将它们声明为 (private) val s 在您的代码中。编译器将对在类的构造函数之外使用的所有构造函数变量执行此操作(请记住,类的构造函数实际上是类本身的整个主体,不包括 valdef 定义)。

关于scala - 需要帮助解释 scala 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6236587/

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