gpt4 book ai didi

Scala - 类就足够了吗?

转载 作者:行者123 更新时间:2023-12-04 03:59:13 25 4
gpt4 key购买 nike

来自 Java,我对 scala 的类/对象区别感到困惑。
请注意,我不要求形式上的区别;有足够的
网络上的引用资料解释了这一点,并且有相关的问题
SO .

我的问题是:

  • 为什么scala的设计者
    选择让事情变得更多
    复杂(与 Java 或
    C#)?我有什么缺点
    期待我是否忽略这种区别
    并只声明类?

  • 谢谢。

    最佳答案

    Java 类包含两种完全不同类型的成员——实例成员(如 BigDecimal.plus)和静态成员(如 BigDecimal.valueOf)。在 Scala 中,有 仅限 实例成员。这实际上是一种简化!但这留下了一个问题:我们将 valueOf 之类的方法放在哪里? ?这就是对象有用的地方。

    class BigDecimal(value: String) {
    def plus(that: BigDecimal): BigDecimal = // ...
    }

    object BigDecimal {
    def valueOf(i: Int): BigDecimal = // ...
    }

    您可以将其视为匿名类的声明及其单个实例化:
    class BigDecimal$object {
    def valueOf(i: Int): BigDecimal = // ...
    }
    lazy val BigDecimal = new BigDecimal$object

    在阅读 Scala 代码时,区分类型和值至关重要。我已将 IntelliJ 配置为突出显示蓝色类型。
    val ls = List.empty[Int]  // List is a value, a reference the the object List
    ls: List[Int] // List is a type, a reference to class List

    Java 还具有在 Scala 中消除的另一种复杂程度——字段和方法之间的区别。接口(interface)上不允许有字段,除非它们是静态的和最终的;方法可以被覆盖,如果在子类中重新定义,字段会被隐藏。 Scala 消除了这种复杂性,只向程序员公开方法。

    最后,对你的第二个问题的一个 glib 答案:如果你不声明任何对象,你的程序可能永远不会运行,因为你定义了 public static void main(String... args) {} 的等价物在 Scala 中,您至少需要一个对象!

    关于Scala - 类就足够了吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3128217/

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