gpt4 book ai didi

scala - 案例类和伴随对象

转载 作者:行者123 更新时间:2023-12-04 18:03:51 24 4
gpt4 key购买 nike

我在正确理解类及其伴随对象的用法时遇到问题。

定义案例类时,会附带它的伴随对象,但是定义与案例类同名的对象会有什么结果呢?它会覆盖伴随对象吗?以及如何访问案例类参数?

例如,在TestCaseClass.scala文件中,我定义了以下内容:

case class TestCaseClass(att1: String, att2: Int, att4s: List[String])

object TestCaseClass {

def iWantDoSomethingWithMyParams: String = {
att1 + " " + att2
}

// Other functions
}

object AnotherTestCaseClass {

def iWantDoSomethingWithTestCaseClassParams: String = {
// How to access TestCaseClass.att1
TestCaseClass.att1 + " " + TestCaseClass.att2
}

def iWantGetAllAttr4: List[String] = {
// ???
}
}

最佳答案

在某种程度上,给object一个与class(或trait)相同的名称只是一个约定问题。但这也有一些特殊的含义。

伴随对象与其他任何对象一样都是单例类。如果您希望伴随对象中的方法与类的实例进行交互,则必须像在任何其他情况下一样,将其传递给类的实例。因此,要修正您的第一个示例:

case class TestCaseClass(att1: String, att2: Int, att4s: List[String])

object TestCaseClass {
def iWantDoSomethingWithMyParams(x: TestCaseClass): String =
x.att1 + " " + x.att2
}

类和对象不会以任何方式“替代”或踩到彼此的脚趾,因为类和对象属于不同的命名空间。类名称在类型级别(以及构造函数调用)中使用,而对象名称在术语级别使用。

类及其同伴之间存在一些关系:
  • 它确实影响解析隐式的方式-在类的伴随对象中定义的任何隐式都会自动进入作用域。
  • 该类的
  • private成员对对象可见,反之亦然。
  • Case类有所不同,因为case class实际上是一种简写形式,除了定义一个类外,还向其伴随对象中添加了applyunapply方法。
  • 关于scala - 案例类和伴随对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36528736/

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