gpt4 book ai didi

scala - 方法和领域有什么区别?

转载 作者:行者123 更新时间:2023-12-01 07:34:22 25 4
gpt4 key购买 nike

在 Java 中,它们之间的区别很明显。但是在 Scala 中,可以在没有括号的情况下声明和使用方法。而且我也知道统一访问原则是 Scala 的哲学。这些都使领域和方法之间的界限对新学习者来说很模糊。

一开始我以为defval是方法和字段的分界线。但事实证明,在 Scala 中,使用 val 在子类中定义的“字段”可以覆盖使用 def 在基类中定义的“方法”,这在我知道的任何语言中似乎都是不可能的区分字段和方法的概念。

所以我想知道:

  1. Scala中是否不存在“字段”的概念(或者完全与无参数方法相同)?

  2. 如果不是,它们之间的界限是什么?

最佳答案

这很简单。例如,对于公共(public) val,scalac 生成私有(private)字段来保存值,以及一个 getter。

class A {
val x = 4
}

在javap中可以看到

public class A {
private final int x;
public int x();
public A();
}

如果你有

trait T { def x = 1 }

什么时候

class A extends T { val x = 4 }

您正在使用 getter x 将特征 T 中的方法 x 覆盖到私有(private)字段 x

关于scala - 方法和领域有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39435686/

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