gpt4 book ai didi

java - 在 Scala 的实例变量方面需要一些帮助

转载 作者:搜寻专家 更新时间:2023-10-31 08:08:07 25 4
gpt4 key购买 nike

假设这段 Java 代码:

public class A {
public A(String g) {
x += g.length();
}

private int x = 0;
}

如果我创建 A 的实例,如下所示:

A a = new A("geo");

调用之后,x 的值将为 3。我的 Scala 代码哪里做错了?

class A(val g:String) {
x += g.length
var x:Int = 0
}

object x extends Application {
val x = new A("geo")
println(x.x)
}

这会打印 0。我假设当编译器到达 var x:Int = 0 时,主构造函数的主体已经结束。我错了吗?您还能如何在 Scala 中声明实例变量(假设我不想在我的构造函数中使用它们)?

最佳答案

请记住,您的代码会转换为与此类似(但不完全)的内容:

public class A {

private final String g;
private int x;

public A(String g) {
this.g = g;
x_$eq(x() + g.length());
x = 0;
}

public void x_$eq(int arg0) {
x = arg0;
}

public int x() {
return x;
}

public String g() {
return g;
}
}

但在(非构造函数)方法中定义的变量会被翻译成实际的局部变量。

不确定这是否能解释推理并突出其中一个差异。


编辑 - 将“翻译”从 scala 更改为 java,以便更清晰和更准确地表示正在发生的事情。

关于java - 在 Scala 的实例变量方面需要一些帮助,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1917182/

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