gpt4 book ai didi

Scala 类扩展了 {}

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

一个偶然的机会,我遇到了奇怪的 Scala 编译语法:

class Some extends {
def hi = println("hi")
}

伙计们:
  • 它是官方 Scala 支持的语法吗?
  • 这是否意味着简单地扩展 Object ?
  • 它是否与“鸭子打字”有关?
  • 你知道这个有趣或棘手的用法吗?

  • 谢谢。

    最佳答案

    这实际上是 Scala 语法中的一个奇怪的怪癖。一个无关紧要的extends在类的主体开始之前允许。以下是来自 Scala Syntax Summary 的相关部分:

    ClassDef          ::=  id [TypeParamClause] {ConstrAnnotation} [AccessModifier] 
    ClassParamClauses ClassTemplateOpt
    ClassTemplateOpt ::= ‘extends’ ClassTemplate | [[‘extends’] TemplateBody]
    ClassTemplate ::= [EarlyDefs] ClassParents [TemplateBody]
    ClassTemplateOpt是类参数之后的所有内容,在本例中是来自 extends 的所有内容向前。 extends的常用用法是 ClassTemplateOpt的第一个交替, 与 extends后跟父级或早期初始化程序。但是,早期初始化程序不能包含 def ,并且无法将大括号的内容解释为父级。它不能是结构类型,因为 hi有具体的定义。

    第二个选项允许类参数紧跟在类主体之后,而不使用 extends .但是,一个可选的 extends被允许。 extends在 OP 的代码中就是一个例子,它完全等同于没有可选扩展的相同代码:
    class Some {
    def hi = println("hi")
    }

    关于Scala 类扩展了 {},我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24836945/

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