Scala中主要构造函数参数的可访问性

瓦拜·拉吉

我很难理解主要构造函数及其参数的概念。到目前为止,我所了解的是:如果我们将以下类定义为

class Example(a: Int, b: Int)

Scala编译器使用上述两个参数生成示例类的主要构造函数。但是,它没有在类Example的定义中定义字段ab但是如果我们定义

class Example(val a: Int, val b: Int)

scala编译器如上所述生成主构造函数,并在类定义中添加两个字段。

现在问题来了,当我尝试一个例子

class PrimaryConstructor(a: Int, b: Int){
    override def toString() = "PrimaryConstructor(" + this.a + ", " + this.b + ")"
}

即使没有名为ab的字段,上述代码也可以很好地编译我无法理解,如果没有这样的字段,那么我如何使用this:当前对象引用来访问它们

object Main{
    def main(args: Array[String]){
            val primaryConstructor = new PrimaryConstructor(1, 2)
            println(primaryConstructor.a)
    }
}

虽然如果我尝试从上述类定义的外部访问它们,则在编译后会收到以下错误消息。

error: value a is not a member of PrimaryConstructor
    println(primaryConstructor.a)

我能理解 但是,如何使用此方法访问这些字段请帮助我理解这一点。

马丁·科林克

它基本上会生成一个私有val,所以

class A(a:Int) {
    def func = a
}

class A(private[this] val a:Int) {
    def func = a
}

是等效的。如果您省略此功能,可能并不完全正确。

当在构造函数主体外部引用构造函数参数时(例如func上述示例),Scala会生成一个private[this] val,否则不会生成

您可以检查scala规范以了解更多详细信息,或查看此stackoverflow问题

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Kotlin VS Scala:使用主要构造函数参数实现方法

来自分类Dev

Scala中构造函数的通用参数

来自分类Dev

Scala:验证重载构造函数中的参数

来自分类Dev

根据构造函数的可访问性在函数之间进行选择的模板方法

来自分类Dev

Scala:清理构造函数参数

来自分类Dev

在构造函数中访问非类型模板参数

来自分类Dev

访问已在 LARAVEL 的构造函数中声明的请求参数

来自分类Dev

在Scala Reflection中,构造函数参数为何隐藏吸气剂?

来自分类Dev

Scala中具有构造函数参数的抽象类

来自分类Dev

scala-meta:在类构造函数中解析可变参数

来自分类Dev

如何在Kotlin中的主要构造函数参数上添加注释

来自分类Dev

C#vnext中的主要构造函数

来自分类Dev

删除的构造函数/运算符的可访问性是否重要?

来自分类Dev

删除的构造函数/运算符的可访问性是否重要?

来自分类Dev

被删除的构造函数“可访问”吗?

来自分类Dev

被删除的构造函数“可访问”吗?

来自分类Dev

Scala Singleton模式:私有主要构造函数

来自分类Dev

Scala 主要构造函数及其生成的字段/属性

来自分类Dev

如何在Scala中访问高阶函数的参数

来自分类Dev

远离主要构造函数

来自分类Dev

为什么在具有相同构造函数参数类型的案例类中,scala可序列化性会有所不同?

来自分类Dev

如何从Java中的主要函数访问方法

来自分类Dev

访问构造函数中的数组

来自分类Dev

如何从构造函数参数范围访问“ this”?

来自分类Dev

了解Scala中的构造函数

来自分类Dev

如何从构造函数作为参数的函数中访问私有类的属性?

来自分类Dev

以函数为参数了解辅助构造函数中的Scala行为

来自分类Dev

从PHP构造函数获取构造参数依赖性

来自分类Dev

从php构造函数获取构造参数依赖性

Related 相关文章

  1. 1

    Kotlin VS Scala:使用主要构造函数参数实现方法

  2. 2

    Scala中构造函数的通用参数

  3. 3

    Scala:验证重载构造函数中的参数

  4. 4

    根据构造函数的可访问性在函数之间进行选择的模板方法

  5. 5

    Scala:清理构造函数参数

  6. 6

    在构造函数中访问非类型模板参数

  7. 7

    访问已在 LARAVEL 的构造函数中声明的请求参数

  8. 8

    在Scala Reflection中,构造函数参数为何隐藏吸气剂?

  9. 9

    Scala中具有构造函数参数的抽象类

  10. 10

    scala-meta:在类构造函数中解析可变参数

  11. 11

    如何在Kotlin中的主要构造函数参数上添加注释

  12. 12

    C#vnext中的主要构造函数

  13. 13

    删除的构造函数/运算符的可访问性是否重要?

  14. 14

    删除的构造函数/运算符的可访问性是否重要?

  15. 15

    被删除的构造函数“可访问”吗?

  16. 16

    被删除的构造函数“可访问”吗?

  17. 17

    Scala Singleton模式:私有主要构造函数

  18. 18

    Scala 主要构造函数及其生成的字段/属性

  19. 19

    如何在Scala中访问高阶函数的参数

  20. 20

    远离主要构造函数

  21. 21

    为什么在具有相同构造函数参数类型的案例类中,scala可序列化性会有所不同?

  22. 22

    如何从Java中的主要函数访问方法

  23. 23

    访问构造函数中的数组

  24. 24

    如何从构造函数参数范围访问“ this”?

  25. 25

    了解Scala中的构造函数

  26. 26

    如何从构造函数作为参数的函数中访问私有类的属性?

  27. 27

    以函数为参数了解辅助构造函数中的Scala行为

  28. 28

    从PHP构造函数获取构造参数依赖性

  29. 29

    从php构造函数获取构造参数依赖性

热门标签

归档