Scala特性如何覆盖到派生的字符串案例类

问题描述 投票:2回答:1

我的背景是C ++ / C,我正在尝试学习scala。我正在努力了解一个特征的toString方法如何覆盖从该特征派生的case类。当然,默认案例类的toString方法应该超越特质吗?我缺少明显的东西吗?

代码

trait Computer {
  def ram: String
  def hdd: String
  def cpu: String

  override def toString = "RAM= " + ram + ", HDD=" + hdd + ", CPU=" + cpu

}

private case class PC(ram: String, hdd: String, cpu: String) extends Computer 

private case class Server(ram: String, hdd: String, cpu: String) extends Computer

object ComputerFactory {
  def apply(compType: String, ram: String, hdd: String, cpu: String) = compType.toUpperCase match {
    case "PC" => PC(ram, hdd, cpu)
    case "SERVER" => Server(ram, hdd, cpu)
  }
}
val pc = ComputerFactory("pc", "2 GB", "500 GB", "2.4 GHz");
val server = ComputerFactory("server", "16 GB", "1 TB", "2.9 GHz");

println("Factory PC Config::" + pc);
println("Factory Server Config::" + server);
scala overriding traits tostring case-class
1个回答
2
投票

[SLS至此很清楚

每个案例类都隐式重写该类的某些方法定义scala.AnyRef除非已经给出了相同方法的定义在案例类本身或同一方法的具体定义中是在案例类的某些基类中给出的AnyRef不同。特别是:

方法toString: String返回包含以下内容的字符串表示形式类及其元素的名称。

因为trait Computer提供了toString的具体定义,并且是PCServer的基类,所以使用Computer.toString

© www.soinside.com 2019 - 2024. All rights reserved.